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

使用Python zipfile模块创建Zip文件时生成空文件的问题排查

问题分析与解决

你的代码生成空Zip文件,大概率是以下原因之一:

  • src路径错误:确认C:\\git\\mytest是否是实际存在的文件夹路径,有没有拼写错误(比如大小写、目录名写错)。
  • full_path为空列表:如果os.walk没遍历到任何文件,就会导致Zip包为空。可以在代码里加一句print(full_path),看看是否输出了预期的文件路径。
  • 同名文件覆盖:如果不同子目录下有同名文件,用basename(item)作为归档名会导致后面的文件覆盖前面的,但这只会导致部分文件丢失,不会完全为空,不过也需要注意。

修正后的代码

下面是更稳健的实现,既保证能正确获取所有文件,还能保留原文件夹的目录结构:

import os
from zipfile import ZipFile

src = r"C:\git\mytest"

# 获取文件夹内所有文件的相对路径+文件名,保留原目录结构
file_paths = []
for root, dirs, files in os.walk(src):
    for file in files:
        relative_path = os.path.relpath(os.path.join(root, file), src)
        file_paths.append((os.path.join(root, file), relative_path))

# 创建Zip包
with ZipFile('output.zip', 'w') as zipObj:
    for file_path, arcname in file_paths:
        zipObj.write(file_path, arcname)

如果不需要保留目录结构,只想把所有文件放到Zip包根目录(注意同名文件会被覆盖),可以用这个版本:

import os
from zipfile import ZipFile

src = r"C:\git\mytest"

file_paths = []
for root, dirs, files in os.walk(src):
    for file in files:
        file_paths.append(os.path.join(root, file))

with ZipFile('output.zip', 'w') as zipObj:
    for item in file_paths:
        zipObj.write(item, os.path.basename(item))

额外检查步骤

  1. 运行代码前,先打印file_paths列表,确认里面有内容:
    print(file_paths)
    
  2. 确认src路径正确,可以用os.path.exists(src)验证:
    print(os.path.exists(src))  # 输出True才说明路径存在
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 03:20:30