大家好,欢迎来到IT知识分享网。
摘要
本代码是一个批量解压缩的python代码,为便于使用(不必每次修改代码内容),实现开箱即用的需求,可直接使用bat命令执行。
项目背景
代码实现
from zipfile import ZipFile for filename in os.listdir(path): zipfile = ZipFile(filename,'r') for item in zipfile.namelist(): zipfile.extract(item, path)
毫无意外的会报错,这里也是十分显然出现了两个问题。
- 代码文件并不是可解压的文件
- 有些压缩文件内是一个文件夹,有些则是一系列散的文件(如下图中的assets和Pinia.md)
跳过代码文件十分的轻松:
if(filename.endswith('.ipynb')):continue if(filename.endswith('.py')):continue
- 如果压缩文件内只有一个同名文件夹,则直接解压缩至当前目录
- 如果压缩文件内只有一个文件夹,则这个文件夹会被解压至目录并将这个文件夹的名字重命名为与压缩文件相同。举个栗子,
day06.zip
文件下只有一个名为06day06
的文件夹,则这个文件夹会被解压缩至当前目录并重命名为day06
。 - 如果压缩文件内不止一个文件,则将其全部解压至目录下与压缩文件同名文件夹下
from zipfile import ZipFile for filename in os.listdir(path): if(filename.endswith('.ipynb')):continue zipfile = ZipFile(filename,'r') # 判断压缩文件内是否只有一个文件夹 flag = False# false表示都在一个文件中 for item in zipfile.namelist(): if not item.startswith(zipfile.namelist()[0]): flag=True break if(flag):# 不在同一个 out_path = os.path.join(path,filename[:-4]) else: out_path = path '''这个是将内部直接解压到同名文件夹下 if(zipfile.namelist()[0]!=filename[:-4]+'/'):#需要重新创建文件夹 for item in zipfile.namelist(): zipfile.extract(item, os.path.join(path,filename[:-4])) continue ''' # 实现解压 for item in zipfile.namelist(): zipfile.extract(item, out_path) # 修改文件夹的名字 if(filename[:-4]!=zipfile.namelist()[0][:-1] and not flag):#都在一个文件夹中但是名字不同 os.rename(zipfile.namelist()[0][:-1],filename[:-4]) zipfile.close()
“部署”
将代码放入py文件并写一个txt文件:python ./xxxxxxx.py
将其改名为.bat
之后只要将其放到想解压的文件夹下就可以自动解压文件夹内所有压缩文件啦。
完整代码
import os path = os.getcwd() from zipfile import ZipFile for filename in os.listdir(path): if(not filename.endswith('.zip')):continue zipfile = ZipFile(filename,'r') flag = False# false表示都在一个文件中 for item in zipfile.namelist(): if not item.startswith(zipfile.namelist()[0]): flag=True break if(flag):# 不在同一个 out_path = os.path.join(path,filename[:-4]) else: out_path = path '''这个是将内部直接解压到同名文件夹下 if(zipfile.namelist()[0]!=filename[:-4]+'/'):#需要重新创建文件夹 for item in zipfile.namelist(): zipfile.extract(item, os.path.join(path,filename[:-4])) continue ''' # print(out_path) # 实现解压 for item in zipfile.namelist(): zipfile.extract(item, out_path) if(filename[:-4]!=zipfile.namelist()[0][:-1] and not flag):#都在一个文件夹中但是名字不同 os.rename(zipfile.namelist()[0][:-1],filename[:-4]) zipfile.close()
优化
上述代码呢只能解压zip文件,但是日常中肯定不止这些,像7z,rar很多类型都不支持这样解压。笔者通过直接用python调用了winrar里的可执行文件进行解压成功了,但是相信这肯定不是最优的方式,查阅资料呢也是发现py7zr
库可以很方便的解决,至于逻辑那肯定是差不多的,代码就等用到再改叭😁
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/129670.html