Python 3.9创建Zip文件时Linux环境含父目录的解决方法
解决Linux下Python生成Zip文件包含多余父目录的问题
问题原因
zipfile.ZipFile.write()默认会使用文件的完整路径作为压缩包内的存储路径,Windows和Linux的路径处理逻辑存在差异,再加上脚本未明确指定压缩后的文件名,导致Linux环境下压缩包出现多余的父目录层级。
解决方案
方法1:明确指定arcname参数(最简单直接)
修改zip.write()的调用代码,通过arcname参数强制指定压缩包内的文件名,忽略原文件的路径信息:
# 替换原脚本中的zip.write行 zip.write('.'.join([file_name,'json']), arcname='.'.join([file_name,'json']))
这样处理后,压缩包内只会保留file_1.json这类目标文件,不会包含opt/my_script/my_folder等父目录层级。
方法2:用Pathlib简化路径处理+自动资源管理
改用pathlib处理路径更直观,同时用with语句自动关闭Zip文件,避免手动调用close()引发资源泄漏:
import os import zipfile from pathlib import Path # 替换原脚本的路径处理部分 script_dir = Path(__file__).parent json_file = script_dir / 'my_folder' / f"{file_name}.json" zip_file = script_dir / f"{file_name}.zip" with zipfile.ZipFile(zip_file, 'w', zipfile.ZIP_DEFLATED) as zip_ref: # 只保留文件名作为压缩包内的存储路径 zip_ref.write(json_file, arcname=os.path.basename(json_file))
额外注意事项
- 不要用
dir作为变量名,它是Python内置函数,容易引发命名冲突 - 优先使用
with语句管理文件类对象,确保资源正常释放
内容的提问来源于stack exchange,提问作者MELEY
相关产品推荐
相关产品推荐

