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
相关产品推荐
相关产品推荐

