Python ZipFile打包目录时误包含同名空压缩文件问题求助
问题解决方案
问题原因
你将生成的ceridian.zip直接存放在了要打包的目标目录E:/GL/download_ceridian中,代码遍历目录内容时,这个刚创建的空zip文件会被当作目录内的文件,被添加到压缩包中,最终导致压缩包里出现同名的空zip文件。
解决方案
以下两种方式均可解决问题,同时满足仅打包.csv文件的需求:
方案1:将zip文件输出到目标目录外
直接修改zip_path,把生成的压缩包放在要打包的目录之外,避免遍历目录时包含它:
from zipfile import ZipFile, ZIP_DEFLATED import pathlib # 将zip文件放在目标目录的上级目录 zip_path = 'E:/GL/ceridian.zip' directory_to_zip = 'E:/GL/download_ceridian' folder = pathlib.Path(directory_to_zip) with ZipFile(zip_path, 'w', ZIP_DEFLATED) as zip: for file in folder.iterdir(): if file.suffix == '.csv': zip.write(file, arcname=file.name)
方案2:遍历文件时过滤非目标文件
在遍历过程中添加判断,只处理.csv文件,同时排除当前正在生成的zip文件:
from zipfile import ZipFile, ZIP_DEFLATED import pathlib zip_path = 'E:/GL/download_ceridian/ceridian.zip' directory_to_zip = 'E:/GL/download_ceridian' folder = pathlib.Path(directory_to_zip) zip_filename = pathlib.Path(zip_path).name with ZipFile(zip_path, 'w', ZIP_DEFLATED) as zip: for file in folder.iterdir(): # 仅打包csv文件,且排除当前生成的zip文件 if file.suffix == '.csv' and file.name != zip_filename: zip.write(file, arcname=file.name)
效果验证
执行修改后的代码,生成的ceridian.zip中只会包含file1.csv和file2.csv两个文件,不会出现同名的空zip文件。
内容的提问来源于stack exchange,提问作者Tye Mathews
相关产品推荐
相关产品推荐

