二狗在整理学习资料时,写的一个小demo,请大佬们雅正.,今天小编就来说说关于python 读取zip打包时间?下面更多详细答案一起来看看吧!

python 读取zip打包时间(刺激用python解压2000个zip文件)

python 读取zip打包时间

前言

二狗在整理学习资料时,写的一个小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) #把乱码格式的文件重命名为转化好的中文文件名

结语

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