pickle datei, append

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
blutigeranfaenger
User
Beiträge: 65
Registriert: Dienstag 4. März 2014, 12:04

Hallo zusammen,
ich habe folgendes Problem:
ich möchte bestimmte Daten in eine Pickle-Datei schreiben.
Leider braucht es sehr lange, bis diese Daten geschrieben sind.
Wäre es möglich, nicht alle Daten auf einmal zu schreiben, sondern dies in mehreren Schritten zu tun, also an die Pickle-Datei in mehreren Schritten immer etwas neues dranzuhängen?
Danke für Eure Tipps!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Nein. Pickle ist nicht incremental. Schrieb einfach eine neu Datei. Oder erklär mal dein eigentliches Problem, das du lösen willst. Ggf gibt es da ganz andere Lösungen, ohne pickelei.
Benutzeravatar
__blackjack__
User
Beiträge: 14069
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@blutigeranfaenger: Warum denkst Du das es einen Unterschied macht die selben Daten in mehreren Schritten zu speichern? Intuitiv würde man ja erst einmal annehmen, dass es dadurch *noch* länger dauert, weil das aufteilen und mehrfache Schreibaufrufe dazu kommen.

Was wird da denn geschrieben? Ist Pickle überhaupt das passende Dateiformat? Das klingt nämlich auf den ersten Blick oft praktischer als es in der Praxis dann tatsächlich ist, weil man beispielsweise relativ leicht Änderungen am Code vornehmen kann, die dazu führen können, das die gespeicherten Daten nicht mehr so richtig zum Code passen. Pickle ist eigentlich nur für kurzzeitig gepickelte Daten oder unwichtige Daten uneingeschränkt zu empfehlen. Also zum Beispiel um Daten für eine Übertragung an andere Prozesse zu serialisieren, wo sie auf der anderen Seite dann *gleich* wieder deserialisiert werden. Das `multiprocessing`-Modul macht das beispielsweise um Python-Objekte zwischen Prozessen zu übertragen. Oder für Cachedateien wo es nicht schlimm ist wenn die Daten nicht wieder gelesen werden können.

@__deets__: Nicht inkrementell aber man kann nacheinander mehrere Objekte serialisieren, die man dann beim lesen auch wieder nacheinander deserialisieren muss. Also aufteilen in mehrere Schreib- und Lesevorgänge ginge schon, aber die Datenmenge ändert sich dabei höchstens in die ”falsche” Richtung, und damit auch der Arbeitsaufwand den das Programm leisten muss, und damit die Laufzeit. Ist also keine Lösung für das Problem.
“Vir, intelligence has nothing to do with politics!” — Londo Mollari
blutigeranfaenger
User
Beiträge: 65
Registriert: Dienstag 4. März 2014, 12:04

Hallo,
ich habe versucht, die Funktion "recrel", die unter
https://taju.uniarts.fi/bitstream/handl ... sAllowed=y
beschrieben wird, mit Python nachzubauen (dort ist es, glaube ich, mit Lisp geschrieben).
Das Programm rechnet letzten Endes einen Ähnlichkeitswert zwischen zwei Akkorden bzw. Tonfolgen aus.
Ich habe es, glaube ich, auch tatsächlich hingekriegt, nur ist meine Version ziemlich langsam, was wohl an meinen Programmierkünsten liegen dürfte. Deshalb dachte ich, ich könnte ja die Werte sämtlicher möglicher Zweierpaare in eine Tabelle schreiben, die dann nur jeweils gelesen werden muss. Kann man das auch ohne Pickle machen?
Benutzeravatar
Kebap
User
Beiträge: 776
Registriert: Dienstag 15. November 2011, 14:20
Wohnort: Dortmund

ich könnte ja die Werte (...) in eine Tabelle schreiben (...) Kann man das auch ohne Pickle machen?
Ja, es gibt dazu viele Möglichkeiten. Vermutlich viele davon auch schneller.
Wie wäre es mit einer reinen Textdatei? Die kann man auch simpel erweitern.
MorgenGrauen: 1 Welt, 8 Rassen, 13 Gilden, >250 Abenteuer, >5000 Waffen & Rüstungen,
>7000 NPC, >16000 Räume, >200 freiwillige Programmierer, nur Text, viel Spaß, seit 1992.
Sirius3
User
Beiträge: 18276
Registriert: Sonntag 21. Oktober 2012, 17:20

Wenn es sich um große Zahlenarrays handelt, werfe ich noch HDF5 in den Ring.
Antworten