zip压缩干货系列-python批量压缩zip文件
import osimport os.path as osp
import zipfile
import shutil
import glob
def extract_zip(zip_path, extract_dir):
with zipfile.ZipFile(zip_path, 'r') as zip_file:
# 首先确保提取目录存在
os.makedirs(extract_dir, exist_ok=True)
zip_list = zip_file.namelist()# 获取压缩文件中的文件路径列表
old_dir = zip_list# 获取第一个文件的名称作为旧目录名称
#print(old_dir)
flag = False# 设置标志变量,用于判断是否有重命名操作
# 遍历ZIP文件中的所有条目
for f in zip_list:
# 中文名称乱码解码
try:
new_name = f.encode('cp437').decode('gbk', errors='ignore')
except UnicodeDecodeError:
new_name = f
if osp.exists(osp.join(extract_dir, new_name)):# 如果文件已存在,则删除该文件或文件夹
shutil.rmtree(osp.join(extract_dir, new_name))
zip_file.extract(f, extract_dir)# 将文件解压到指定工作目录
if f != new_name:# 如果文件名与新名称不同,则进行重命名操作
flag = True# 设置标志变量为True
if osp.exists(osp.join(extract_dir, new_name)):#如果新名称的文件已存在,则删除该文件或文件夹
shutil.rmtree(osp.join(extract_dir, new_name))
os.rename(osp.join(extract_dir, f), osp.join(extract_dir, new_name))# 将文件重命名为新名称
if flag:# 如果进行了重命名操作
if osp.exists(osp.join(extract_dir,old_dir)):# 如果旧目录存在,则删除该目录
shutil.rmtree(osp.join(extract_dir,old_dir))
if __name__ == '__main__':
data_dir = os.getcwd()# 获取当前工作目录
zip_pathlist = glob.glob(osp.join(data_dir, '**', '*.zip'), recursive=True)# 所有压缩文件的路径列表
for zip_path in zip_pathlist:
# 为每个ZIP文件创建一个单独的目录来解压其内容
extract_dir = osp.basename(osp.join(data_dir, osp.splitext(osp.basename(zip_path))))
extract_zip(zip_path, extract_dir) 站内搜索 Uzip 作者更新到2.2了吧,好几年没更新了,不过依然好用,可自行将压缩内关于7z的文件替换成最新版得7z FDL 发表于 2024-5-25 08:40
用库压缩是个不错的选择,但是有什么办法可以调用7zip这种软件来压缩呢?用库还是调用shell?
7z也支持命令行,用 os.system(命令)调用就可以了。如没有python,直接使用批处理也行。 有空油瓶一下 感谢大佬分享。{:1_932:}
有机会我去试一试。 可以,有空试试 用库压缩是个不错的选择,但是有什么办法可以调用7zip这种软件来压缩呢?用库还是调用shell?
zip文件压缩后占用空间不如7z,容量稍大
建议采用7z方式 不错,代码也不复杂,多谢分享! 站内有个uzip挺好用的,用的7z的,支持自定义压缩密码和解压密码,支持多文件处理 一直在复制和学习的路上,感谢大佬
页:
[1]
2