Python zipfile dosen't Release Zip-Datei

Ich versuche, die Zipfile- Bibliothek auf Windows 8.1 und Python 2.7.9 zu verwenden.

Ich möchte nur library.zip nach zipfile.open entfernen () aber os.remove () wirft "WindowsError [Error 32]" und es scheint, dass zipfile die Zip-Datei nicht mit Block freigibt.

WindowsError 32 bedeutet "Der Prozess kann nicht auf die Datei zugreifen, da er von einem anderen Prozess verwendet wird."

Also, wie kann ich diese library.zip Datei entfernen?

Code:

import os import zipfile as z dirs = os.listdir('build/') bSystemStr = dirs[0] print("[-] Merging library.zip...") with z.ZipFile('build/' + bSystemStr + '/library.zip', 'a') as z1: with z.ZipFile('build_temp/' + bSystemStr + '/library.zip', 'r') as z2: for t in ((n, z2.open(n)) for n in z2.namelist()): try: z1.writestr(t[0], t[1].read()) except: pass print("[-] Cleaning temporary files...") os.remove('build_temp/' + bSystemStr + '/library.zip') 

Fehler:

 [-]Merging library.zip... ... build.py:74: UserWarning: Duplicate name: 'xml/sax/_exceptions.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/expatreader.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/handler.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/saxutils.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xml/sax/xmlreader.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xmllib.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'xmlrpclib.pyc' z1.writestr(t[0], t[1].read()) build.py:74: UserWarning: Duplicate name: 'zipfile.pyc' z1.writestr(t[0], t[1].read()) [-] Cleaning temporary files... Traceback (most recent call last): File "build.py", line 79, in <module> os.remove('build_temp/' + bSystemStr + '/library.zip') WindowsError: [Error 32] : 'build_temp/exe.win32-2.7/library.zip' 

One Solution collect form web for “Python zipfile dosen't Release Zip-Datei”

Ich glaube, Sie müssen Ihr Archiv schließen, bevor Sie es löschen oder das Programm verlassen, wie es in der Python-Dokumentation steht. https://docs.python.org/2/library/zipfile.html#zipfile.ZipFile.close

Führen Sie also z1.close() und z2.close() bevor Sie ein Archiv entfernen

Dein Code muss so aussehen:

 import os import zipfile as z dirs = os.listdir('build/') bSystemStr = dirs[0] print("[-] Merging library.zip...") with z.ZipFile('build/' + bSystemStr + '/library.zip', 'a') as z1: with z.ZipFile('build_temp/' + bSystemStr + '/library.zip', 'r') as z2: for t in ((n, z2.open(n)) for n in z2.namelist()): try: z1.writestr(t[0], t[1].read()) except: pass z2.close() z1.close() print("[-] Cleaning temporary files...") os.remove('build_temp/' + bSystemStr + '/library.zip') 

Wenn ich mich irre, korrigiere mich

  • Wie kann ich nur die Ordner im Zip-Archiv in Python auflisten?
  • Python - wie man Unicode-Dateinamen in CP437 konvertiert?
  • Python / zip: Wie kann man den absoluten Pfad im Zip-Archiv eliminieren, wenn absolute Pfade für Dateien bereitgestellt werden?
  • So erstellen Sie Symlink in zipfile in python
  • Zipping dynamische Dateien in App Engine (Python)
  • Mit Python können Sie eine Liste von Dateien in eine Zip-Datei hinzufügen
  • CSV sollte Strings zurückgeben, nicht Bytes Fehler
  • Python: Dateien in ein Archiv ohne Verzeichnis holen?
  • Wie man csv-Datei in zip-Archiv direkt komprimiert?
  • Laden und entpacken Sie Datei mit Python
  • So erstellen Sie ein Zip-Archiv eines Verzeichnisses
  • Python ist die beste Programmiersprache der Welt.