Datei innerhalb einer ZIP-Datei mit Python modifizieren
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.
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 kopierenNach dem Öffnen sowohl der Eingabedatei als auch der Ausgabe-ZIP mit
with zipfile.ZipFile(srcfile) as inzip, zipfile.ZipFile(dstfile, "w") as outzip:iterieren wir durch alle Dateien in der Eingabe-ZIP-Datei:
for inzipinfo in inzip.infolist():Falls wir die Datei gefunden haben, die wir modifizieren möchten, identifiziert durch ihren Dateinamen test.txt:
if inzipinfo.filename == "test.txt":lesen und modifizieren wir den Inhalt ….
with inzip.open(inzipinfo) as infile:
content = infile.read().replace("abc", "123")… und schreiben den modifizierten Inhalt in die Ausgabe-ZIP:
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
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.