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

前言

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


编程环境

0.操作系统:win10

thon版本:3.7

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

文件:>=1

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

代码拆检

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

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

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

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

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

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

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

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

刺激!用python解压2000个zip文件
 dir(file_path) #调用dir()方法生成每一个zip文件解压后对应保存的空文件夹

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

刺激!用python解压2000个zip文件
with File(file=zip_file, mode="r") as z: # 读取解压文件
            for name in list(): #for循环遍历读取每一个压缩包里的内容

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

刺激!用python解压2000个zip文件
z.extract(member=name,path=file_path) #文件解压到指定位置

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

刺激!用python解压2000个zip文件刺激!用python解压2000个zip文件
old_name = in(file_path, name) #读取每一个解压后的文件名
new_name = in(file_path, name.encode('cp437').decode('gbk'))#把乱码的文件名格式转化为中文编码
ame(old_name, new_name) #把乱码格式的文件重命名为转化好的中文文件名

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

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

完整代码

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

结语

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


https://www.xianxiaba.com/kejitongxun/31859020.html

本站所有信息均由爬虫抓取,用于机器学习,如有发现包括但不限于“违法、违规信息、侵权信息”,请联系站长删除处理。