Seite 1 von 1

Dateien komprimieren mit zipfile

Verfasst: Freitag 7. Juli 2006, 13:38
von ws
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

Verfasst: Freitag 7. Juli 2006, 16:57
von murph
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 ;)

Verfasst: Freitag 7. Juli 2006, 21:30
von BlackJack
@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:

Code: Alles auswählen

from zipfile import ZipFile, ZIP_DEFLATED
zf = ZipFile('binaer.db.zip', 'w', ZIP_DEFLATED)
Wenn Du nur eine Datei komprimieren möchtest, dann bietet sich auch das `gzip` Modul an.

Verfasst: Samstag 8. Juli 2006, 11:48
von Joghurt
BlackJack hat geschrieben:Wenn Du nur eine Datei komprimieren möchtest, dann bietet sich auch das `gzip` Modul an.
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)

Verfasst: Samstag 8. Juli 2006, 16:41
von Leonidas
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)
Oder man nutzt einfach die Kommandozeilentools gzip und/oder bzip2 die das gleiche erledigen.

Danke

Verfasst: Mittwoch 12. Juli 2006, 16:13
von ws
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