Hallo,
was ich gerne möchte, ist folgendes:
ich habe eine binäre Datei binaer.db
Die möchte ich so komprimieren, dass ich eine gezippte Datei
binaer.db.zip
erhalte.
Aus der Python2.2-Doku zu ZipFile entnehme ich, dass die Klasse ZipFile für solche Zwecke vorgesehen ist, kriege das aber nicht richtig hin.
Was ich gemacht habe, war
zf = ZipFile("binaer.db.zip", "w")
zf.write("binaer.db")
zf.close()
Im Ergebnis habe ich dann eine Datei im meinem Verzeichnis herumliegen, diese ist aber länger als das Originalfile.
Kann ich das Gewünschte mit zipfile überhaupt erreichen?
Mit vielem Dank im Voraus
ws
Dateien komprimieren mit zipfile
also du zippst mit dem befehl den string 'binaer.db'.
und archive haben zwangsweise immer einen gewissen platzanspruch für das inhaltsverzeichnis & CO, daher macht es nur sinn, größere dateien zu zippen.
auch kann es sein, dass deine binärdatei nicht über zipt zu verkleinern ist, kenne den algorythmus nicht, aber wer kennt das nicht, wenn man sieht, dass alles in allem nur 1% weniger wegnimmt (zb image-dateien)
außerdem ist tarfile flexibler und in meinen augen ausgereifter...also, wenns nicht zip sein muss
und archive haben zwangsweise immer einen gewissen platzanspruch für das inhaltsverzeichnis & CO, daher macht es nur sinn, größere dateien zu zippen.
auch kann es sein, dass deine binärdatei nicht über zipt zu verkleinern ist, kenne den algorythmus nicht, aber wer kennt das nicht, wenn man sieht, dass alles in allem nur 1% weniger wegnimmt (zb image-dateien)
außerdem ist tarfile flexibler und in meinen augen ausgereifter...also, wenns nicht zip sein muss
http://www.cs.unm.edu/~dlchao/flake/doom/
@murph: Nein er zippt nicht die Zeichenkette 'binaer.db'
Man kann in Zip-Dateien auch Dateien speichern ohne sie zu komprimieren. Das ist die Voreinstellung, wenn Du beim erzeugen des `ZipFile` Objekts nichts anderes angibst. Das sollte also so aussehen:
Wenn Du nur eine Datei komprimieren möchtest, dann bietet sich auch das `gzip` Modul an.
Man kann in Zip-Dateien auch Dateien speichern ohne sie zu komprimieren. Das ist die Voreinstellung, wenn Du beim erzeugen des `ZipFile` Objekts nichts anderes angibst. Das sollte also so aussehen:
Code: Alles auswählen
from zipfile import ZipFile, ZIP_DEFLATED
zf = ZipFile('binaer.db.zip', 'w', ZIP_DEFLATED)
Oder noch besser, das bzip2-Module (bessere Komprimierung; gzip nutzt denselben Algorithmus wie ZIPs, bz2 ist effektiver, allerdings auch langsamer, was man bei heutigen CPUs jedoch nicht mehr merkt)BlackJack hat geschrieben:Wenn Du nur eine Datei komprimieren möchtest, dann bietet sich auch das `gzip` Modul an.
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Oder man nutzt einfach die Kommandozeilentools gzip und/oder bzip2 die das gleiche erledigen.Joghurt hat geschrieben:Oder noch besser, das bzip2-Module (bessere Komprimierung; gzip nutzt denselben Algorithmus wie ZIPs, bz2 ist effektiver, allerdings auch langsamer, was man bei heutigen CPUs jedoch nicht mehr merkt)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Hallo,
vielen Dank für alle Antworten, nach reiflicher Überlegung habe ich mich für die Verwendung des gzip-Moduls entschieden.
Die Kommandozeilentools sind leider nicht auf jedem OS installiert (unter Windows im allgemeinen nicht), deswegen bin ich auf Pythons Bordmittel angewiesen.
Gruss
Wolfgang
vielen Dank für alle Antworten, nach reiflicher Überlegung habe ich mich für die Verwendung des gzip-Moduls entschieden.
Die Kommandozeilentools sind leider nicht auf jedem OS installiert (unter Windows im allgemeinen nicht), deswegen bin ich auf Pythons Bordmittel angewiesen.
Gruss
Wolfgang