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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:34:56