pickle-modul

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
MikeJey
User
Beiträge: 5
Registriert: Sonntag 4. März 2018, 13:10

Liebe Leute,

im Rahmen von Berechnungen speichere ich meine "Ergebnissobjekte" in eine pickle-Datei.

Code: Alles auswählen

with open('resultfile.pkl', 'wb') as output:
    pickle.dump(Results1, output, -1)
    pickle.dump(Results2, output, -1)


Sowohl Results1 als auch Results2 beinhalten diverse Methoden und daraus resultierend Ergebnisse aus dynamischen Simulationsberechnungen.
Diese Objekte sind jeweils der Klasse ResultNumber zugehörig. Die Datei im Ordner heißt ebenfalls "ResultNumber.py"

Code: Alles auswählen

class ResultNumber(object):
    def __init__(self):
        self.T = []
        …
Diese Ergebnissdatei möchte ich später in einem anderen Skript ("Plotting.py") auswerten, die ich wie folgt aufrufe:

Code: Alles auswählen

with open('path\to\resultfile.pkl', 'rb') as input:
    R1 = pickle.load(input)
    R2 = pickle.load(input)
Folgendes Problem:
Pickle kann die Ergebnissdatei nur aufrufen, wenn das Script "ResultNumber.py" mit in dem Ordner ist, wo sich auch "Plotting.py" befindet. Ich möchte aber aus Übersichtlichkeitsgründen, dass die beiden Scripte nicht in einem Ordner sind, da meine Ergebnissdatei später noch mehr Results beinhalten soll. Entferne ich "ResultNumber.py" so kommt die Fehlermeldung:

Code: Alles auswählen

R1      = pickle.load(input)
ImportError: No module named ResultNumber
Unterordner mit in das Skript importieren habe ich schon probiert:

Code: Alles auswählen

import unterordner1.unterordner2.ResultNumber as ResultNumber
Er kann es importieren, aber die Fehlermeldung bleibt die selbe.

Weiß jemand eine Möglichkeit die Module aus Unterordnern reinzuladen, sodass pickle dann das öffnen kann?
__deets__
User
Beiträge: 14494
Registriert: Mittwoch 14. Oktober 2015, 14:29

So funktioniert pickle halt. Es speichert komplette Objekte. Es ist ausserdem nicht menschenlesbar. Aus beiden Gruenden empfiehlt sich ein anderes Datenformat. Je nach dem wie deine Daten aussehen, kann das verschiedenes sein:

- CSV. Einfach und robust, aber kann zB nicht so ohne weiteres hierarchische Daten darstellen, oder generell heterogene Daten.
- JSON. Nicht viel schwerer als CSV, insbesondere wenn man als Daten schon simple Python-Strukturen verwendet.
- HDF5. Habe ich persoenlich noch nicht viel mit gemacht, ist aber auf dem Weg in der wissenschatflichen Community ein wichtiger Standard zu sein. Oder da sogar schon angekommen.
Antworten