Eks6666 发表于 2024-5-24 21:22

zip压缩干货系列-python批量压缩zip文件

import os
import 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)

青春莫相随 发表于 2024-5-26 09:59

站内搜索   Uzip 作者更新到2.2了吧,好几年没更新了,不过依然好用,可自行将压缩内关于7z的文件替换成最新版得7z

wkdxz 发表于 2024-5-25 09:06

FDL 发表于 2024-5-25 08:40
用库压缩是个不错的选择,但是有什么办法可以调用7zip这种软件来压缩呢?用库还是调用shell?

7z也支持命令行,用 os.system(命令)调用就可以了。如没有python,直接使用批处理也行。

252339439 发表于 2024-5-24 23:23

有空油瓶一下

ZhangPuBi 发表于 2024-5-25 03:43

感谢大佬分享。{:1_932:}
有机会我去试一试。

guai188528 发表于 2024-5-25 08:10

可以,有空试试

FDL 发表于 2024-5-25 08:40

用库压缩是个不错的选择,但是有什么办法可以调用7zip这种软件来压缩呢?用库还是调用shell?

kangta520 发表于 2024-5-25 08:43

zip文件压缩后占用空间不如7z,容量稍大
建议采用7z方式

zhengsg5 发表于 2024-5-25 12:33

不错,代码也不复杂,多谢分享!

青春莫相随 发表于 2024-5-25 12:34

站内有个uzip挺好用的,用的7z的,支持自定义压缩密码和解压密码,支持多文件处理

yks1985 发表于 2024-5-25 14:54

一直在复制和学习的路上,感谢大佬
页: [1] 2
查看完整版本: zip压缩干货系列-python批量压缩zip文件