使用zipfile.ZipFile创建压缩文件报错:No such file or directory
Python创建包含文件夹的压缩文件踩坑指南
兄弟,你的问题我一眼就抓到关键点了——路径里的转义字符在搞鬼!先给你拆解问题,再给你靠谱的解决方案:
为什么你的代码会报错?
你写的路径"P:\2018\Archive\CO_007_II.zip"里,\2018会被Python当成八进制转义字符解析,实际生成的路径根本不是你预期的P:\2018\Archive\...,这就导致Python找不到对应的目录,自然创建不了压缩文件!哪怕你用了'w'模式,路径错了一切白搭。
第一步:先搞定路径转义的坑
有三种简单办法避开这个问题:
- 用原始字符串:在路径前加
r,比如r"P:\2018\Archive\CO_007_II.zip",Python会原封不动解析路径 - 换成正斜杠:
"P:/2018/Archive/CO_007_II.zip",Windows系统完全支持正斜杠路径 - 双反斜杠转义:
"P:\\2018\\Archive\\CO_007_II.zip",用反斜杠转义反斜杠
第二步:正确打包整个文件夹
zipfile的write()方法默认只能添加单个文件,直接传文件夹路径没用。要打包整个文件夹(包括子文件夹结构),得递归遍历文件夹内容,给你写个现成可用的函数:
import zipfile import os def zip_entire_folder(source_folder, target_zip_path): # 用ZIP_DEFLATED启用压缩(不加的话是无压缩的存储模式) with zipfile.ZipFile(target_zip_path, 'w', zipfile.ZIP_DEFLATED) as zip_file: # 遍历文件夹下所有文件和子目录 for root, _, files in os.walk(source_folder): for file_name in files: # 拼接当前文件的完整路径 full_file_path = os.path.join(root, file_name) # 计算压缩包内的相对路径,保留原文件夹结构 relative_path = os.path.relpath(full_file_path, os.path.dirname(source_folder)) zip_file.write(full_file_path, relative_path) # 按你的需求调用 source = r"P:\2018\CO_007_II" target_zip = r"P:\2018\Archive\CO_007_II.zip" zip_entire_folder(source, target_zip)
额外补充说明
- 你用的是Python2.7(从报错路径
C:\Python27\ArcGIS10.2能看出来),记得尽量用原始字符串或正斜杠,避免编码问题 'w'模式确实会创建新文件,如果目标压缩包已存在会直接覆盖,这点你理解的没错,之前报错纯是路径转义的锅- 如果不想保留文件夹结构,只想把所有文件平级塞进压缩包,可以把
relative_path改成os.path.basename(full_file_path)
内容的提问来源于stack exchange,提问作者geoJshaun
相关产品推荐
相关产品推荐

