You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python解压多个解压后文件名重复的Zip文件?

多Zip文件解压(含同名文件处理)的Python解决方案

先解决你的语法错误

你代码里的with ZipFile(file_name_1,file_name_2 'r') as zip:存在两个问题:

  1. ZipFile构造函数一次只能接收一个压缩包路径,不能同时传两个文件名;
  2. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 01:54:24