2017-02-22 19 views
1

我創建了一個腳本來備份用戶指定文件夾指定的位置作爲一個zip文件中的用戶,我可以運行該腳本一次,就好了,但如果我再次運行該腳本,並使用相同的參數爲zip文件名我得到下面的錯誤。如何解決已經在python中關閉的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

是'bkZip.close()'真的應該在頂級循環內縮進?這看起來顯然是錯誤的,但也可能是將代碼複製到Stack Overflow編輯器的產品,而不是實際代碼中問題的原因。如果那條線真的如此,那麼只要在'backUp'位置有一個子文件夾(無論您運行腳本多少次),我都希望您的備份失敗。 – Blckknght

回答

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() 
+0

謝謝你剛解決一個「文件已存在錯誤」 和它的一個問題,我的備份文件夾起來作爲 'zip文件://首頁/明野/桌面/自舉/ 的 ''zip文件代替 ://自舉/' – TheCryptek

1

取決於究竟要發生什麼。

您可以檢查是否與目標文件名的文件已經存在,然後更改名稱(說,my_zip_file.zip.old)或者刪除它:

if os.path.exists(foo): 
    os.remove(foo) 

或者你可以打印警告並要求用戶刪除現有的檔案或中止。

或者,如果你的目的是要追加到存檔,您可以:

  • 從舊的備份
  • 刪除現有的備份
  • 然後寫舊的備份和電流的組合提取物的一切輸出到新的歸檔
+0

計劃是檢查,看看目標文件已經存在,然後將其刪除,使一個新test.zip – TheCryptek

+0

新增的,如果它存在刪除文件的一些代碼! – Junuxx

+0

那麼這會刪除文件,但腳本會將文件移動到另一個由用戶指定的目錄。那麼如何讓它刪除指定目錄中的文件 – TheCryptek