使用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))
额外检查步骤
- 运行代码前,先打印
file_paths列表,确认里面有内容:print(file_paths) - 确认
src路径正确,可以用os.path.exists(src)验证:print(os.path.exists(src)) # 输出True才说明路径存在
内容的提问来源于stack exchange,提问作者Safwat
相关产品推荐
相关产品推荐

