龙空技术网

刺激!用python解压2000个zip文件

李文博Data 424

前言:

现时小伙伴们对“python解压文件夹”大概比较看重,看官们都想要分析一些“python解压文件夹”的相关知识。那么小编同时在网上搜集了一些对于“python解压文件夹””的相关知识,希望我们能喜欢,朋友们一起来了解一下吧!

前言

二狗在整理学习资料时,写的一个小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:\test'  #ZIP文件所在的路径save_path = r'E:\test\解压结果' #解压后的文件保存路径

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:\test目录下的文件名

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

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

if file.endswith('.zip') and file_name not in os.listdir(save_path):        """判断E:\test文件夹下的文件是否为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:\test'  #ZIP文件所在的路径save_path = r'E:\test\解压结果' #解压后的文件保存路径for file in os.listdir(zip_path): # for循环遍历zip文件路径    file_name = os.path.basename(file).rsplit('.', maxsplit=1)[0] #去除.zip文件扩展名,得到E:\test目录下的文件名    if file.endswith('.zip') and file_name not in os.listdir(save_path):        """判断E:\test文件夹下的文件是否为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) #把乱码格式的文件重命名为转化好的中文文件名
结语

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

标签: #python解压文件夹