große Textmengen komprimiert verwenden - Speicher sparen

Code-Stücke können hier veröffentlicht werden.
Antworten
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Da es keine Rubrik "Tipps" gibt, poste ich meine neuste Erkenntnis einfach hier :)
Geschichte:
Eines meiner Projekte benötigt sehr viele und große Textdateien, die ständig zunehmen werden. Allein jetzt schon in der Testphase sind es gute 15Mb Textdateien. In Zukunft werden es 250Mb++.
Damit der Enduser des Scripts nicht soviel Speicherplatz verbrauchen soll, hab ich mir überlegt, wie ich das ganze komprimieren kann.
Da ist mir ein alter Scherz-Virus eingefallen, der eine komprimierte .txt aus einer .zip entpackt. Die .zip ist wenige Mb groß, doch die entpackte .txt mehrere Gb.
Doch das ganze würde einem nichts nützen, wenn man die .txt entpacken muss.

Also macht man sich dem Modul "zipfile" zunutze und ließt die .txt ohne sie zu entpacken.
Beispiel: #Python 2.7

Code: Alles auswählen

import zipfile

z = zipfile.ZipFile("zipfile.zip", "r")
for filename in z.namelist():
        print filename
        content = z.read(filename)
        print len(content)
        print content.split()
Glücklicherweise kann man den Inhalt unkomprimiert auslesen.
Als Beispiel hab ich 10 .txt-Dateien mit gleichem Inhalt jeweils 89Mb groß in eine .zip gepackt und diese war anschließend 3Mb groß.
Wer also mit ziemlich vielen großen .txts handeln muss, spart mit dieser Methode wertvollen Speicher.
BlackJack

@Dami123: Das ist alles ein wenig verwirrend. Diese Virus-Geschichte hat keinen wirklichen Zusammenhang und Du liest die Daten nicht aus der ZIP-Datei ohne sie zu entpacken, denn sie wird ja entpackt.

Ich würde ja einfach die Dateien (de)komprimieren mit dem `gzip`- oder `bz2`-Modul aus der Standardbibliothek, oder `lzma` wenn es auch etwas ausserhalb der Standardbibliothek sein darf. Dann hat man normale Dateien ohne die Einschränkungen die einem das ZIP-Dateiformat auferlegt.
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Es geht mir um die hohe Kompression, die bei .txt Dateien erreicht werden kann. Da ist mir als erstes die Zip-Bombe eingefallen.
"bz2" sieht gut aus, es lassen sich Zeilen lesen und schreiben. http://docs.python.org/2/library/bz2.html
Einfacher als .zip zu verwenden wird es sein, aber es geht mir mehr um die Kompressionsrate. Werde es bei Gebrauch testen und schauen welches Modul die "besten" Ergebnisse liefert.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dein "Tipp" ist also, dass man Dateien komprimieren kann, um Festplattenplatz zu sparen? Wunderbar, dafuer ist Kompression da.

Dass es mit Textdateien wunderbar funktioniert ist, dass saemtliche gaengigen Kompressionsmethoden eben genau auf Textdateien ausgelegt sind.

Ich glaube du willst mal mehr ueber Kompression lernen: http://mattmahoney.net/dc/dce.html
Dami123
User
Beiträge: 225
Registriert: Samstag 23. Februar 2013, 13:01

Es gibt viele Dinge die für bestimmte Sachen da sind, doch sie kommen einem nicht per Fingerschnippen zugeflogen.
Und wenn man, wie ich, am Anfang seiner Programmierkarriere steht, ist jede funktionierende Idee ein guter boost ;)

Mit mehr Programmiererfahrung würde ich mich an die fortgeschrittenen Funktionen der Komprimierung wagen, sofern ich einen Nutzen daraus ziehen kann.
Antworten