Datei innerhalb einer ZIP-Datei mit Python modifizieren

English Deutsch

Python stellt das zipfile-Modul zum Lesen und Schreiben von ZIP-Dateien bereit. Unsere vorherigen Beiträge Python-Beispiel: Dateien in einem ZIP-Archiv auflisten und Herunterladen & Lesen einer ZIP-Datei im Speicher mit Python zeigen, wie man Dateien in einer ZIP-Datei auflistet und liest.

In diesem Beispiel zeigen wir, wie man Dateien von einer ZIP-Datei in eine andere kopiert und eine der Dateien dabei modifiziert. Dies ist oft der Fall, wenn Sie ZIP-Dateiformate wie ODT oder LBX als Vorlagen verwenden und Teile des Textinhalts einer Datei ersetzen möchten.

modify_zip.py
import zipfile

with zipfile.ZipFile(srcfile) as inzip, zipfile.ZipFile(dstfile, "w") as outzip:
    # Eingabedateien iterieren
    for inzipinfo in inzip.infolist():
        # Eingabedatei lesen
        with inzip.open(inzipinfo) as infile:
            if inzipinfo.filename == "test.txt":
                content = infile.read()
                # Inhalt der Datei modifizieren durch Ersetzen eines Strings
                content = content.replace("abc", "123")
                # Inhalt schreiben
                outzip.writestr(inzipinfo.filename, content)
            else: # Andere Datei, nicht modifizieren => einfach kopieren

Nach dem Öffnen sowohl der Eingabedatei als auch der Ausgabe-ZIP mit

modify_zip.py
with zipfile.ZipFile(srcfile) as inzip, zipfile.ZipFile(dstfile, "w") as outzip:

iterieren wir durch alle Dateien in der Eingabe-ZIP-Datei:

modify_zip.py
for inzipinfo in inzip.infolist():

Falls wir die Datei gefunden haben, die wir modifizieren möchten, identifiziert durch ihren Dateinamen test.txt:

modify_zip.py
if inzipinfo.filename == "test.txt":

lesen und modifizieren wir den Inhalt ….

modify_zip.py
with inzip.open(inzipinfo) as infile:
    content = infile.read().replace("abc", "123")

… und schreiben den modifizierten Inhalt in die Ausgabe-ZIP:

modify_zip.py
outzip.writestr("test.txt", content)

Andernfalls, wenn die aktuelle Datei nicht die Datei ist, die wir modifizieren möchten, kopieren wir die Datei einfach in die Ausgabe-ZIP mit

modify_zip.py
outzip.writestr(inzipinfo.filename, infile.read())

Beachten Sie, dass der Algorithmus die Datei immer mit .read() aus der Eingabe-ZIP liest, daher wird ihr gesamter Inhalt vorübergehend im Speicher gespeichert. Deshalb funktioniert es nicht gut für Dateien, die im unkomprimierten Zustand groß sind.


Check out similar posts by category: Python