如何用Python解压多个解压后文件名重复的Zip文件?
多Zip文件解压(含同名文件处理)的Python解决方案
先解决你的语法错误
你代码里的with ZipFile(file_name_1,file_name_2 'r') as zip:存在两个问题:
ZipFile构造函数一次只能接收一个压缩包路径,不能同时传两个文件名;file_name_2和'r'之间缺少逗号,导致语法结构错误。
针对多Zip+同名文件的正确实现
因为解压后文件名相同,直接解压到同一目录会覆盖文件,这里提供两种实用方案:
方案1:每个Zip解压到独立子目录(保留原结构)
这种方式会给每个压缩包创建单独的子文件夹,彻底避免文件覆盖:
from zipfile import ZipFile import os # 把所有需要处理的Zip文件路径存入列表 zip_file_list = [ "D:/PS files/file from VDI/from VGS/Gy/mash.zip", "D:/PS files/file from VDI/from VGS/Gy/mash.1.zip" ] # 解压根目录 base_dir = "D:/PS files/file from VDI/from VGS/Gy" for zip_path in zip_file_list: # 提取压缩包的文件名(不带后缀)作为子目录名 zip_basename = os.path.splitext(os.path.basename(zip_path))[0] extract_target = os.path.join(base_dir, zip_basename) # 自动创建子目录(不存在则新建) os.makedirs(extract_target, exist_ok=True) with ZipFile(zip_path, 'r') as zip_ref: print(f"正在处理: {zip_path}") zip_ref.printdir() print("开始解压...") zip_ref.extractall(extract_target) print(f"{zip_path} 解压完成\n") print("所有压缩包处理完毕!")
方案2:所有文件解压到同一目录,重命名避免覆盖
如果需要把所有文件放在同一个文件夹下,可以给来自不同Zip的同名文件加上序号标识:
from zipfile import ZipFile import os zip_file_list = [ "D:/PS files/file from VDI/from VGS/Gy/mash.zip", "D:/PS files/file from VDI/from VGS/Gy/mash.1.zip" ] target_dir = "D:/PS files/file from VDI/from VGS/Gy" os.makedirs(target_dir, exist_ok=True) # 遍历每个压缩包,用序号区分来源 for zip_index, zip_path in enumerate(zip_file_list, start=1): with ZipFile(zip_path, 'r') as zip_ref: print(f"处理第{zip_index}个压缩包: {zip_path}") # 逐个处理压缩包里的文件 for file_info in zip_ref.infolist(): # 跳过目录文件 if file_info.is_dir(): continue # 拆分文件名和后缀,添加序号重命名 file_name, file_ext = os.path.splitext(file_info.filename) new_file_name = f"{file_name}_{zip_index}{file_ext}" full_new_path = os.path.join(target_dir, new_file_name) # 读取压缩包内文件内容,写入新路径 with zip_ref.open(file_info) as source_file, open(full_new_path, 'wb') as target_file: target_file.write(source_file.read()) print(f"{zip_path} 处理完成\n") print("所有文件处理完毕!")
内容的提问来源于stack exchange,提问作者navid Abbaspour
相关产品推荐
相关产品推荐

