2017-02-22 14 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()'は本当にトップレベルのループの内側にインデントされているはずですか?それは明らかに間違っているようですが、あなたの実際のコードの問題の原因ではなく、スタックオーバーフローエディタにコードをコピーした結果かもしれません。その行が本当にそうであれば、(スクリプトを何回実行したかにかかわらず) '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

関連する問題