Python 2.6.6创建Zip文件出现嵌套问题求助
问题原因分析
你遇到的这个问题很典型——你正在压缩的目录里,恰好包含了你刚创建的test.zip文件。
当你执行zipfile.ZipFile('/home/stbUpgrade/tmp/downLoad/test.zip', 'w')时,系统会立刻在/home/stbUpgrade/tmp/downLoad/目录下创建一个空的test.zip文件。紧接着调用createZip函数用os.walk遍历这个目录,os.walk会把这个刚生成的空zip文件也当成普通文件,一起打包进最终的压缩包。如果压缩过程中文件还在写入,甚至可能会出现大小为1MB的情况(部分写入的内容)。
修复方案
这里有两种简单有效的修复方式,你可以根据需求选择:
方案1:把压缩包放在目标目录之外
最直接的方法是,不要把生成的test.zip放在你要压缩的downLoad目录里,而是放在父目录或者其他路径:
import os import zipfile def createZip(path, ziph): # ziph is zipfile handle for folder, subfolders, files in os.walk(path): for file in files: ziph.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file),path), compress_type = zipfile.ZIP_DEFLATED) # 把zip文件放在downLoad的父目录tmp下,而不是downLoad内部 zipf = zipfile.ZipFile('/home/stbUpgrade/tmp/test.zip', 'w') createZip('/home/stbUpgrade/tmp/downLoad/', zipf) zipf.close()
方案2:遍历文件时跳过test.zip
如果必须把压缩包放在目标目录里,可以在遍历文件的时候,判断文件名是否是test.zip,如果是就跳过:
import os import zipfile def createZip(path, ziph): # ziph is zipfile handle for folder, subfolders, files in os.walk(path): for file in files: # 跳过名为test.zip的文件 if file == 'test.zip': continue ziph.write(os.path.join(folder, file), os.path.relpath(os.path.join(folder,file),path), compress_type = zipfile.ZIP_DEFLATED) zipf = zipfile.ZipFile('/home/stbUpgrade/tmp/downLoad/test.zip', 'w') createZip('/home/stbUpgrade/tmp/downLoad/', zipf) zipf.close()
内容的提问来源于stack exchange,提问作者Vetrivelkumar Pandi
相关产品推荐
相关产品推荐

