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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:16:07