如何将txt文件压缩为zip并批量写入多个指定目录
报错原因
- 错误将
ZipFile实例对象传入仅支持路径类参数的os.path.join()方法,触发类型不匹配报错 - 仅全局创建了一次压缩包实例,未在每个目标目录下单独生成压缩文件
- 变量名不统一,前文获取的目录列表变量为
directories_list,循环中误用了未定义的folder_list
修正实现代码
import os import zipfile # 配置参数 source_txt_path = 'N:/Project/50813_Medicaid_UPL_DSH/NJ1/Data Files from CMS/UPL/Guidance_Document_Extract/_ticket5250_sandbox/guidancedocnotes.txt' target_root_dir = 'N:/Project/50813_Medicaid_UPL_DSH/NJ1/Data Files from CMS/UPL/Guidance_Document_Extract/_ticket5250_sandbox/2021' # 获取目标目录列表 directories_list = retrieve_file_paths(target_root_dir) # 遍历每个目标目录生成压缩包 for target_folder in directories_list: # 拼接当前目录下的压缩包完整路径 zip_save_path = os.path.join(target_folder, 'guidancedocnotes.zip') # 创建当前目录的压缩包 with zipfile.ZipFile(zip_save_path, 'w', zipfile.ZIP_DEFLATED) as zip_file: # 写入txt文件,arcname指定压缩包内的文件名,避免带入全路径目录结构 zip_file.write(source_txt_path, arcname=os.path.basename(source_txt_path)) print(f"压缩包已生成至:{zip_save_path}")
注意说明
- 使用
with语法管理ZipFile实例,无需手动关闭文件句柄,避免资源泄漏 arcname参数可控制压缩包内的文件名称,去掉原文件的全路径前缀,解压后直接得到txt文件- 若
retrieve_file_paths返回的路径包含文件而非纯目录,可在遍历前增加if os.path.isdir(target_folder)判断过滤
内容的提问来源于stack exchange,提问作者miquiztli_
相关产品推荐
相关产品推荐

