如何解决已在python中关闭的zip存档?

时间:2017-02-22 03:00:55

标签: python zipfile

我创建了一个脚本,将用户指定的文件夹备份到用户指定的位置作为zip文件,我可以运行一次脚本,但如果我再次运行脚本并使用相同的参数作为zip文件名我收到以下错误。

Attempt to write to ZIP archive that was already closed

下面的Zip文件代码:

bkZip = zipfile.ZipFile(backZip, 'w') # Not sure what to say for lines 26 - 31
for dirname, subdirs, files in os.walk(backUp): 
    bkZip.write(dirname)
    for filename in files:
        bkZip.write(os.path.join(dirname, filename))
    bkZip.close()

我不完全确定如何解决此问题并需要一些帮助。

2 个答案:

答案 0 :(得分:1)

取决于你想要发生什么。

您可以检查目标文件名是否已存在,然后更改名称(例如my_zip_file.zip.old)或删除它:

^.*_en(\.|$)(?!.*_[a-z]{2}(\.|$)).*$

或者您可以打印警告并要求用户删除现有存档或中止。

或者,如果您打算附加到存档,则可以:

  • 从旧备份中提取所有内容
  • 删除现有备份
  • 然后将旧备份和当前输出的组合写入新存档

答案 1 :(得分:1)

试试这个:

for dirname, subdirs, files in os.walk(backUp):
    bkZip.write(dirname)
    for filename in files:
        bkZip.write(os.path.join(dirname, filename))
bkZip.close()