Ich arbeite gerade an einem Stück eines größeren Puzzles. Für mein Stück habe ich ein Dateiobjekt und das Ziel der Zip-Datei. Mir ist nie bewusst, wie groß das Dateiobjekt ist. Ich weiß nur, dass ich einen habe. Da muss der zip64 unterstützen.Wie fügen Sie Bytes über Python 2.7 in eine Datei innerhalb einer Zip-Datei an?
Mein Ziel ist es, das Dateiobjekt (Zeiger auf die Datei) zu nehmen und es in die Zip-Datei zu schreiben, ohne die gesamte Datei in den Speicher zu laden. Ich möchte das Stück für Stück machen (besonders wenn das Dateiobjekt wirklich groß ist).
Irgendwelche Ideen, wie ich das machen kann?
import zipfile
zip_path = "/tmp/file.zip"
file_to_zip_path = "/home/ryanb58/Desktop/movie.mp4"
with zipfile.ZipFile(zip_path, mode="w", allowZip64=True) as zip:
f = open(file_to_zip_path, 'rb')
while True:
data = f.read(1024)
zip.writestr("file.mp4", data)
if not data:
break
Mein Problem ist, dass, wenn ich die neuen Bytes in die Datei innerhalb der Zip schreiben. Als ich fertig bin, öffne ich den Zip und es ist nur eine riesige Liste von kleinen Dateien mit dem gleichen Namen, jede etwa 1024 Byte groß. Mein Code über ^^ Ich bin irgendwie festgefahren, also würden irgendwelche Ideen oder Lösungen groß sein.
ich Sie daran zweifeln nur Bytes in einem zip in eine Datei anhängen könnte - dass Daten innerhalb der zip zusammenhängend sein, und wenn Sie versuchen, eine Datei in die Mitte anhängen, zwingen Sie necessarifly ein den gesamten Reißverschluss von diesem Punkt an neu schreiben. Sie können die Datei innerhalb der ZIP-Datei löschen und stattdessen die neue Kopie hinzufügen. –
haben Sie versucht, 'zip.write (file_to_zip_path)' anstelle des gesamten 'with' Blocks zu verwenden? – jfs
@MarcB Während Ihr Ansatz funktioniert, löst es nicht unbedingt mein Problem. Ich müsste immer noch wissen, wie man die Datei schreibt, ohne das Ganze in den Speicher zu bringen. – Ryanb58