百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

Python代码解压的中文文件名是乱码,怎么解决?

off999 2024-11-14 16:56 17 浏览 0 评论

大家好,我是Python进阶者。

一、前言

前几天在Python白银交流群【fashjon】问了一个Python自动化办公的问题,问题如下:

import zipfile

def unzip_file(zip_file_path, output_folder_path):
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        zip_ref.extractall(output_folder_path)

# 使用示例
zip_file_path = 'example.zip'
output_folder_path = 'output_folder'
unzip_file(zip_file_path, output_folder_path)

以上代码解压的中文文件名是乱码,怎么解决?

二、实现过程

这里【瑜亮老师】给了个思路如下:乱码是什么样子的?最好能传上来一个压缩包,我们好试验。

过了几分钟,【瑜亮老师】补充道:@fashjon?我查看了一下zipfile的源码,发现是使用了'cp437'编码了文件名才导致的文件名错误。既然知道了错误的编码,那么方法就很简单了,1修改源码,2自己写代码读取解压缩路径中的文件名,重新使用'cp437'编码然后用gbk解码,重命名文件名,问题解决。修改后的代码如下:

import zipfile
import os
def unzip_file(zip_file_path, output_folder_path, encoding='gbk'):
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        zip_ref.extractall(output_folder_path)
    # 遍历解压后的目录,检查并修正文件名
    for root, dirs, files in os.walk(output_folder_path):
        for bad_name in files:
            # 假设这里我们知道ZIP文件使用的是'gbk'编码(但实际情况可能不同)
            if not bad_name.isascii():  # 如果文件名包含非ASCII字符
                true_name = bad_name.encode('cp437').decode(encoding)
                os.rename(os.path.join(root, bad_name), os.path.join(root, true_name))
# 使用示例
zip_file_path = 'example.zip'
output_folder_path = 'output_folder'
unzip_file(zip_file_path, output_folder_path)

不确定你的电脑里是否安装pathlib,因此使用了os,顺利地解决了粉丝的疑问。

粉丝追问:解压文件用什么库比较好?

回答1:这方面我只知道zipfile和代码调用winrar。平时很少接触匹量处理压缩包。

回答2:批量处理压缩包,直接wps批量解压就可以了;

回答3:何须wps,只要电脑上装的有任意解压软件,全选压缩包,右键,可以解压到一个文件夹,也可以每个压缩包单独生成一个文件夹。代码只不过方便遍历多层文件夹目录,如果都在一个文件夹中,还不如右键点选更方便。

如果你也有类似这种Python相关的小问题,欢迎随时来交流群学习交流哦,有问必答!

三、总结

大家好,我是Python进阶者。这篇文章主要盘点了一个Python自动化办公的问题,文中针对该问题,给出了具体的解析和代码实现,帮助粉丝顺利解决了问题。

最后感谢粉丝【fashjon】提出的问题,感谢【瑜亮老师】给出的思路,感谢【莫生气】等人参与学习交流。

【提问补充】温馨提示,大家在群里提问的时候。可以注意下面几点:如果涉及到大文件数据,可以数据脱敏后,发点demo数据来(小文件的意思),然后贴点代码(可以复制的那种),记得发报错截图(截全)。代码不多的话,直接发代码文字即可,代码超过50行这样的话,发个.py文件就行。

相关推荐

硬盘恢复分区(硬盘恢复分区怎么删除)

1、在电脑上下载DiskGenius软件。2、双击运行该软件,软件会自动识别硬盘。当软件自动识别硬盘之后,右键单击硬盘的盘符,出现下拉菜单栏,选择搜索已丢失分区(重建分区表)选项。3、右键单击硬盘盘符...

edge 浏览器(edge浏览器官网下载)
edge 浏览器(edge浏览器官网下载)

目前没有,如果是平板安装了WIN10是会内置MicrosoftEdge浏览器的。edge是由微软开发的基于Chromium开源项目及其他开源软件的网页浏览器。Edge浏览器主要特点是能够支持目前主流的Web技术,作为Windows10自带...

2025-11-18 06:51 off999

网易163邮箱免费注册(163网易免费邮件注册)
网易163邮箱免费注册(163网易免费邮件注册)

163邮箱登录入口页面官方地址:https://mail.163.com/163邮箱登录注册方法1、进入邮箱登入首页,我们点击右下角“去注册”按钮,进入注册界面;2、这里直接填写账号和密码内容,点一下同意那里呈蓝色圆点;再点下一步。3、再填...

2025-11-18 06:03 off999

苹果商城app下载安装(苹果商店app免费下载)

一、苹果手机下载软件显示APP内购买的意思是APP可以免费下载使用,但是该APP内有付费内容,也就是通常所说的收费道具。二、不是所有应用都会提供App内购买项目。如果某个应用提供App内购买...

惠普电脑中国官网(惠普手提电脑官网)

https://support.hp.com/cn是惠普笔记本售后服务官网。惠普维修服务中心通过整合线上线下相关资源,向国内用户提供方便快捷、安全可靠的优质电子产品维修服务。目前拥有北京6家、全国30...

windows2003密钥序列号(win2003 密钥)

没有密钥就无法完成程序安装。使用或者购买密钥才能安装

电脑产品密钥在哪里找win10(电脑产品密钥在哪里找新机)

要查看电脑上Windows10的产品密钥,你可以按照以下步骤进行操作:打开“开始”菜单,然后点击“设置”图标(齿轮状图标)。在“设置”窗口中,点击“更新和安全”选项。在左侧导航栏中,选择“激活”选项...

电脑有网络但上不到网(电脑有网但是上不了网)

如果电脑显示有网但无法上网,可能是网络连接出现问题。这种情况可能是由于以下几个原因导致的:1.路由器或者调制解调器出现故障;2.电脑的网络设置有误;3.网络供应商的服务中断或者限制了你的网络访问...

笔记本突然开不了机了是什么情况

1.检查笔记本是否有电,当内置电池用完而又没有充电的情况下,会导致笔记本无法开机,插上电源充电即可。2.内置电池损坏维修更换即可。3.开机时按F8,在高级选项中选择最后一次正确的配置即可。4.中病毒可...

windows11办公软件(windows11的office)

1、首先点击电脑底部的Windows图标2、进入开始页面点击office套件中的任意应用,如Word3、页面弹出登录按钮,和创建按钮,如已有账号,点击登录4、接着进入激活office页面,输入offi...

7z文件怎么打开(7z文件改什么后缀才能打开)
7z文件怎么打开(7z文件改什么后缀才能打开)

  7z是一种压缩格式,和我们在Windows平台上看到的rar类似;7z原本是7-zip开源的压缩文件所支持的压缩格式,目前大多数压缩软件也支持打开,如若安装了第三方压缩软件双击即可打开7z。7z文件的打开方式介绍如下:  1、扩展名为...

2025-11-18 02:03 off999

重装系统后连不上网(重装系统后无法连网)

1、首先,在安装系统完成之后,界面右下角网络连接显示不可用?我们需要通过,系统本身自带的诊断系统进行诊断,以避免是否是物理原因造成的网络不能正常链接。2、其次,检测结果如果是显示的未能安装网络适配器,...

破解wifi密码有什么办法(破解wifi密码有什么办法幻影)

破解路由器admin管理员密码方法:只能间接的破解。 方法一、1、打开浏览器---输入192.168.1.1(一般路由器地址是这个或者查看路由器背面的登录信息)进路由---输入用户名,密码...

电脑截屏如何截屏(电脑截屏截屏用哪个键)

1、直接点击键盘上的PrtScSysRq,即可截图,然后直接在聊天框或者图画中“Ctrl+V”粘贴就行了。2、登录QQ以后,点击快捷键“Ctrl+Alt+A”即可截图,框选过后,直接“...

迅捷路由器登录(yr1900g路由器登录入口)

入口如下:1.打开网页后输入192.168.1.1或tplogin.cn。2.第一次登录路由器或恢复出厂设置后再次设置,按提示设置好管理员密码、上网参数、wifi名称和密码。3.再次进入登录页面中,输...

取消回复欢迎 发表评论: