文件解压不出来怎么回事,文件不能解压是什么原因

文件解压不出来怎么回事,文件不能解压是什么原因

题图来自Unsplash,基于CC0协议

前言

二狗在整理学习资料时,写的一个小demo,请大佬们雅正.

编程环境

0.操作系统:win10

1.python版本:3.7

2.模块:os zipfile (python自带,无需pip安装)

3.ZIP文件:>=1

代码拆检import os #导入os模块import zipfile #导入os模块zip_path = r'E: est' #ZIP文件所在的路径save_path = r'E: est解压结果' #解压后的文件保存路径

1.导入os和zipfile模块,变量保存zip文件所在的文件路径并指定解压文件的存放路径.(请提前创建解压文件的保存文件夹)

for file in os.listdir(zip_path): # for循环遍历zip文件路径 file_name = os.path.basename(file).rsplit('.', maxsplit=1)[0] #去除.zip文件扩展名,得到E: est目录下的文件名

2.for循环遍历获取zip文件下的每一个文件名.

3.用os.path.basename获取到每一个文件的真实名称,并使用字符串方法rsplit以"."为分割符向右分割一次,去除文件扩展名.

if file.endswith('.zip') and file_name not in os.listdir(save_path): """判断E: est文件夹下的文件是否为zip压缩类型与 上一步得到的文件名是否存在解压后的文件里,避免重复解压文件""" zip_file = os.path.join(zip_path, file) #用os.join函数拼接出每一个zip文件的绝对路径 file_path = os.path.join(save_path, file_name) #用os.join函数拼接出每一个zip文件解压后保存的绝对路

4.判断zip文件存放目录下的文件是否为zip压缩类型与 上一步得到的文件名是否存在解压后的文件里,避免重复解压文件(这里二狗知道zipfile有一个is_zipfile方法也可以判断是否为zip文件).再用os.join函数拼接出每一个zip文件的绝对路径和每一个zip文件解压后保存的绝对路径.

os.mkdir(file_path) #调用os.mkdir()方法生成每一个zip文件解压后对应保存的空文件夹

5.os.mkdir()方法生成每一个zip文件解压后对应保存的空文件夹

with zipfile.ZipFile(file=zip_file, mode="r") as z: # 读取解压文件 for name in z.namelist(): #for循环遍历读取每一个压缩包里的内容

6.请看上面代码注释,这里如果压缩包里的文件名以中文命名的话,解压出来的文件名会是乱码.因为zipfile模块的底层用的是cp437解码,而我们在windows平台上压缩包文件名编码大多是gbk,所以就会出现文件名乱码的情况.

z.extract(member=name,path=file_path) #文件解压到指定位置

7.请再看上面代码注释,到了这一步如果压缩包里没有中文名文件存在的情况下,恭喜你,已经完成文件解压了.如果有中文名,那就参考第8步.

old_name = os.path.join(file_path, name) #读取每一个解压后的文件名new_name = os.path.join(file_path, name.encode('cp437').decode('gbk'))#把乱码的文件名格式转化为中文编码os.rename(old_name, new_name) #把乱码格式的文件重命名为转化好的中文文件名

8.获取乱码文件名以GBK解码,重命名文件即可到,此步骤代码已书写完毕.

完整代码import os #导入os模块import zipfile #导入os模块zip_path = r'E: est' #ZIP文件所在的路径save_path = r'E: est解压结果' #解压后的文件保存路径for file in os.listdir(zip_path): # for循环遍历zip文件路径 file_name = os.path.basename(file).rsplit('.', maxsplit=1)[0] #去除.zip文件扩展名,得到E: est目录下的文件名 if file.endswith('.zip') and file_name not in os.listdir(save_path): """判断E: est文件夹下的文件是否为zip压缩类型与 上一步得到的文件名是否存在解压后的文件里,避免重复解压文件""" zip_file = os.path.join(zip_path, file) #用os.join函数拼接出每一个zip文件的绝对路径 file_path = os.path.join(save_path, file_name) #用os.join函数拼接出每一个zip文件解压后保存的绝对路径 os.mkdir(file_path) #调用os.mkdir()方法生成每一个zip文件解压后对应保存的空文件夹 with zipfile.ZipFile(file=zip_file, mode="r") as z: # 读取解压文件 for name in z.namelist(): #for循环遍历读取每一个压缩包里的内容 z.extract(member=name,path=file_path) #文件解压到指定位置 old_name = os.path.join(file_path, name) #读取每一个解压后的文件名 new_name = os.path.join(file_path, name.encode('cp437').decode('gbk'))#把乱码的文件名格式转化为中文编码 os.rename(old_name, new_name) #把乱码格式的文件重命名为转化好的中文文件名结语

以上汇报完毕,下篇文章再见.

本文地址:https://www.cknow.cn/archives/11571

以上内容源自互联网,由百科助手整理汇总,其目的在于收集传播生活技巧,行业技能,本网站不对其真实性、可靠性承担任何法律责任,如有侵权请联系删除。特此声明!

题图来自Unsplash,基于CC0协议