吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 960|回复: 11
收起左侧

[Python 原创] zip压缩干货系列-python批量压缩zip文件

[复制链接]
Eks6666 发表于 2024-5-24 21:22
[Python] 纯文本查看 复制代码
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[0]  # 获取第一个文件的名称作为旧目录名称
		#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))[0])) 
		extract_zip(zip_path, extract_dir)

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
ZhangPuBi + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

青春莫相随 发表于 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
感谢大佬分享。
有机会我去试一试。
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
一直在复制和学习的路上,感谢大佬
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-11 19:51

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表