Dateien komprimieren mit zipfile

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Freitag 7. Juli 2006, 13:38

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
murph
User
Beiträge: 622
Registriert: Freitag 14. April 2006, 19:23
Kontaktdaten:

Freitag 7. Juli 2006, 16:57

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 ;)
http://www.cs.unm.edu/~dlchao/flake/doom/
BlackJack

Freitag 7. Juli 2006, 21:30

@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.
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Samstag 8. Juli 2006, 11:48

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)
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 8. Juli 2006, 16:41

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
ws
User
Beiträge: 65
Registriert: Freitag 16. Juni 2006, 13:19

Mittwoch 12. Juli 2006, 16:13

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
Antworten