前言:
现时小伙伴们对“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解压文件夹