2016-11-30 2 views
0

Ich bin neu in Python. Hier ist mein Ziel, Daten in eine Datei in zip zu setzen. Das Folgende ist der Code, den ich geschrieben habe, in dem ich Daten in eine entpackte_Datei schreibe, dann entpackte_Datei in komprimierte_Datei.zip schreibe und dann die entpackte Datei entpacke.Wie direkt Datei in Python zu Zip hinzufügen?

import os 
import zipfile 

##Some code above............. 
for some_data in big_data: 
    with open('unzipped_file', 'a+') as unzipped_f: 
     unzipped_f.write(some_data) 

##Some code in between........... 

with zipfile.ZipFile('zipped_file.zip', 'w') as zipped_f: 
    zipped_f.write("unzipped_file") 

os.remove("unzipped_file") 

Anstatt eine Zwischen-entpackte_Datei zu erstellen. Kann ich meine Daten direkt in zipped_file in einem Schritt schreiben.

Antwort

1

zipfile.writestr(file_name, bytes) schreibt Rohdaten von bytes in ein Archiv. file_name ist der Name einer Datei, die das Archiv enthält.

with zipfile.ZipFile('zipped_file.zip', 'w') as zipped_f: 
    zipped_f.writestr("file_name", some_data) 

EDIT: das einzige, was Sie mehrere Stücke von Daten zu einem gewissen Datei in einem Archiv zu schreiben, tun können, ist, alles zu schreiben, auf einmal:

with zipfile.ZipFile('zipped_file.zip', 'w') as zipped_f: 
    zipped_f.writestr("file_name", ''.join(x for x in big_data)) 

Die oben beschriebene Methode funktioniert nur wenn big_data Strings enthält. Andernfalls können Sie versuchen pickle.dumps(big_data) oder pickle.dumps(list(big_data)).

Beachten Sie, dass dann eine Kopie von big_data (sofern es sich nicht um einen Generator handelt) im Speicher erstellt und dann in eine Datei geschrieben wird. Es ist nicht möglich, eine Datei in einem vorhandenen ZipFile Archiv zu aktualisieren, ohne sie zu extrahieren und dann erneut zu zippen.

+0

Sorry für die falsche Kommunikation, aber hier versuche ich Daten in eine entpackte_Datei anhängen und dann in ZIP_Datei zu halten. Ich habe den Code für Referenz – Eudie

+0

@Eudie bearbeitet, siehe meine Bearbeitung – ForceBru

0

Nach docs könnten Sie verwenden:

with zipfile.ZipFile('someZipFile.zip', 'a') as myzip: 
    myzip.write('someFileToBeAdded.txt') 

someFileToBeAdded.txt an bestehende someZipFile.zip Datei hinzuzufügen. Wenn someZipFile.zip nicht existiert, wird es erstellt.

+0

Es wird empfohlen, 'mit Anweisung' mit Dateien zu verwenden. – ettanany

+0

Vielen Dank für den Vorschlag, obwohl der Hauptfokus hier auf dem Hinzufügen der Datei zu Zip-Datei, anstatt "richtige" Weg zum Öffnen der Datei war. – Fejs

+0

Entschuldigung für die falsche Kommunikation, aber hier versuche ich, Daten in eine entpackte_Datei einzufügen und dann in gezippte_Datei zu behalten. Ich habe den Code als Referenz bearbeitet – Eudie

Verwandte Themen