Ich muss ungefähr ein Dutzend Objekte in einer Datei speichern und sie später wiederherstellen. Ich habe versucht, eine for-Schleife mit Gurke und Regal zu verwenden, aber es hat nicht richtig funktioniert.
Bearbeiten.
Alle Objekte, die ich speichern wollte, befanden sich in derselben Klasse (ich hätte das schon früher erwähnen sollen), und ich wusste nicht, dass ich die gesamte Klasse einfach so speichern konnte:
import pickle
def saveLoad(opt):
global calc
if opt == "save":
f = file(filename, 'wb')
pickle.dump(calc, f, 2)
f.close
print 'data saved'
elif opt == "load":
f = file(filename, 'rb')
calc = pickle.load(f)
else:
print 'Invalid saveLoad option'
Antworten:
Wenn Sie mehrere Objekte speichern müssen, können Sie sie einfach in eine einzelne Liste oder ein Tupel einfügen, zum Beispiel:
Wenn Sie viele Daten haben, können Sie die Dateigröße reduzieren, indem Sie
protocol=-1
an übergebendump()
.pickle
verwendet dann das beste verfügbare Protokoll anstelle des standardmäßigen historischen (und abwärtskompatibleren) Protokolls. In diesem Fall muss die Datei im Binär - Modus (geöffnet werdenwb
undrb
jeweils).Der Binärmodus sollte auch mit Python 3 verwendet werden, da sein Standardprotokoll Binärdaten (dh Nicht-Textdaten) erzeugt (Schreibmodus
'wb'
und Lesemodus'rb'
).quelle
with open('objs.pickle', 'wb') as f:
(beachten Sie daswb
).with open('objs.pkl') as f:
man einfach vergleichenobj1, obj2 = pickle.load(open("objs.pkl","rb"))
? Gibt es einen Unterschied zwischen diesen beiden?Es gibt eine eingebaute Bibliothek namens
pickle
. Mit könnenpickle
Sie Objekte in eine Datei sichern und später laden.quelle
f = open('store.pckl', 'wb')
um eine Datei zu öffnen, in die geschrieben werden soll. Siehe stackoverflow.com/questions/13906623/… und verwenden Sie `f = open ('store.pckl', 'rb'), um eine Datei zum Lesen zu öffnen. Siehe stackoverflow.com/questions/7031699/… .Sie sollten sich die Regal- und Essiggurkenmodule ansehen . Wenn Sie viele Daten speichern müssen, ist es möglicherweise besser, eine Datenbank zu verwenden
quelle
Ein anderer Ansatz zum Speichern mehrerer Variablen in einer Pickle-Datei ist:
quelle
Sie können verwenden
klepto
, um dauerhaftes Caching für Speicher, Festplatte oder Datenbank bereitzustellen.Dann, nach dem Neustart des Interpreters ...
Den Code erhalten Sie hier: https://github.com/uqfoundation
quelle
Der folgende Ansatz scheint einfach zu sein und kann mit Variablen unterschiedlicher Größe verwendet werden:
quelle
hickle
Paket ist robuster (weniger fehleranfällig) und noch einfacher (weniger Code) alspickle
.