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

Python实现同名TXT文件复制后单独压缩的技术求助

解决方案:复制同名TXT文件并单独压缩

原代码存在的问题

  • 双重遍历目录的方式效率极低,文件数量较多时会大幅拖慢运行速度
  • 缺少核心的文件单独压缩逻辑
  • 未针对文件操作可能出现的异常(如权限问题、文件损坏)做针对性处理

修正后的完整代码

import os
import shutil
import zipfile

src_folder = "C:/Users/pushka/pythonApp1/src_folder"
dst_folder = "C:/Users/pushka/pythonApp1/dst_folder"
ext = ".txt"

# 先收集目标目录下所有同名txt文件的文件名,提升判断效率
dst_txt_files = {
    os.path.basename(entry)
    for entry in os.scandir(dst_folder)
    if entry.is_file() and entry.name.endswith(ext)
}

for src_entry in os.scandir(src_folder):
    # 只处理源目录下的txt文件,且目标目录存在同名文件
    if src_entry.is_file() and src_entry.name.endswith(ext) and src_entry.name in dst_txt_files:
        src_path = src_entry.path
        dst_path = os.path.join(dst_folder, src_entry.name)
        
        try:
            # 复制文件内容到目标目录
            shutil.copyfile(src_path, dst_path)
            print(f"已复制文件: {src_entry.name}")
            
            # 单独压缩复制后的文件
            zip_path = os.path.join(dst_folder, f"{os.path.splitext(src_entry.name)[0]}.zip")
            with zipfile.ZipFile(zip_path, "w", zipfile.ZIP_DEFLATED) as zipf:
                # arcname参数确保zip内只保留文件名,不带目录路径
                zipf.write(dst_path, arcname=src_entry.name)
            print(f"已压缩文件到: {zip_path}")
            
        except Exception as e:
            print(f"处理文件 {src_entry.name} 时出错: {str(e)}")

print("所有文件处理完成")

代码关键说明

  • 高效判断同名文件:先把目标目录的txt文件名存入集合,遍历源目录时直接用in判断,时间复杂度从O(n*m)降到O(n)
  • 单独压缩逻辑:用zipfile.ZipFile以压缩模式(ZIP_DEFLATED)创建zip包,通过arcname控制压缩包内的文件路径,避免把系统目录结构打包进去
  • 异常处理:针对单个文件的操作加try-except,确保一个文件出错不会中断整个程序,同时输出错误信息便于排查

内容的提问来源于stack exchange,提问作者art

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 02:54:25