Crendle

Stellt hier eure Projekte vor.
Internetseiten, Skripte, und alles andere bzgl. Python.
Antworten
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Guten Tag,
ich habe mir ein eigenes Modul zur Datenspeicherung geschrieben. Das besondere daran ist, dass alle Daten direkt in eine Datei geschrieben werden und auch darauß gelesen. Damit können belibig große Daten sehr schnell gespeichert und gelesen werden, da nie die ganze Datei gelesen wird. Außerdem können die Inhalte komprimiert und verschlüsselt werden. Es ermöglicht auch die Speicherung von allen Typen wie Lists, Tuples, Dicts, Variabel, etc. Das ganze funktioniert wie ein Dict, man kann Dateien mit einem Key einspeichern und darüber wieder aufrufen. Geschrieben in Python 2.6 ...

http://www.python-forum.de/pastebin.php?mode=view&s=192

Nur die Funktion sort() arbeitet noch nicht richtig. Bei kleineren Datenmegen kann man sie jedoch ohne Probleme nutzen.

Was meint ihr dazu? Ich habe es inzwischen schon öfters verwendet und finde es extrem praktisch, wenn man mit großen Datenmengen arbeiten muss...

gruß waki
Zuletzt geändert von waki am Mittwoch 8. Juni 2011, 16:26, insgesamt 1-mal geändert.
Lasse
User
Beiträge: 112
Registriert: Donnerstag 3. Februar 2011, 18:25

Ich meine dazu, dass man für so ein riesen Skript ruhig einmal den Pastebin verwenden könnte. :P
deets

@waki

Es ist nicht plattformunabhaenging, benutzt keine memory-mapped IO, so dass ich deinen Geschwindigkeits-Aussagen kritisch gegenueber bin, und dupliziert Funktionalitaet von Standardmodulen wie bsddb - warum sollte man also crendle den Vorzug geben ueber denen?
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Ja, das trifft zu, dazu bin ich aber leider noch nicht zu erfahren um platformunabhängig zu schreiben. Ich meine Geschwindigkeit insofern, dass nicht alle Daten im Arbeitsspeicher gehalten werden, aber dennoch leicht darauf zugegriffen werden kann. Memory-mapped IO sagt mir leider auch nicht sehr viel, aber das schau ich mir mal als nächstes an :D Ich kannte dieses Modul leider nicht, außerdem unterstützt meines Verschlüsselung und Komprimierung :)

€: Wenn ich mmap nutze, dann werden wieder alle Daten im Abreitsspeicher gehalten, so wie ich das jetzt in der Doku verstanden habe, und das wollte ich ja gerade nicht. Oder lieg ich da falsch? Den gerade wenn ich Daten mit mehreren GB habe, dann reicht der Arbeitsspeicher nicht lange und alles wird langsam...
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Du solltest Deine `__del__`-Methode noch mal überdenken... in jeglicher Hinsicht ;-) Denn die ist weder von der Intention sicher, noch inhaltlich gut gemacht (Pfade kann man `mit os.path.join` zusammenbauen).
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Ist mir auch aufgefallen, leider weiß ich nicht wie beheben... Gibt es eine Möglichkeit, dass ich auch self.flush() dort noch aufrufen kann?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

waki hat geschrieben:Ist mir auch aufgefallen, leider weiß ich nicht wie beheben... Gibt es eine Möglichkeit, dass ich auch self.flush() dort noch aufrufen kann?
Naja, für `__del__` gibt es eben keine Garantie, ob und wann das ganze aufgerufen wird. Du hast da ja eigentlich nur eine Klasse - was für mich schon danach riecht, dass Du eine Klasse als Modul missbrauchst. Insofern wäre es vielleicht denkbar, dass Du das "Aufräumen" in eine entsprechende Funktion verpackst, die falls benötigt einfach aufgerufen wird. Ich habe Deinen Code halt nicht studiert, insofern kann ich Dir nicht sagen, wo Du das am besten einbaust. Ich kann Dir nur sagen, dass `__del__` eigentlich immer der falsche Ort ist ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
waki
User
Beiträge: 133
Registriert: Dienstag 9. März 2010, 16:41

Ok, danke ^^ Ich halte das ganze in einer Klasse, da es ich es eigentlich ähnlich wie ein Dict aufziehen wollte....
Antworten