Was ist der Unterschied zwischen Gurke und shelve?
-
29-09-2019 - |
Frage
Ich lerne über Objektserialisierung zum ersten Mal. Ich habe versucht, zu lesen und ‚googeln‘ für Unterschiede in den Modulen Pickles und shelve aber ich bin nicht sicher, ob ich es verstehe. Wann verwendet man welche? Pickle kann jedes Objekt in Python Bytestrom drehen, die in eine Datei beibehalten werden kann. Warum tun wir das Modul shelve brauchen? Ist das nicht schneller Pickles?
Lösung
pickle
ist für die Serialisierung einige Objekt (oder Objekte) als eine einzige Bytestrom in einer Datei.
shelve
baut auf den pickle
und implementiert eine Serialisierung Wörterbuch, in dem Objekt gebeizt werden, aber mit einem Schlüssel (etwas string) verbunden ist, so dass Sie Ihre Akten gelegt Datendatei laden können und Zugriff auf Ihre eingelegten Objekte über Tasten. Dies könnte bequemer sein, waren Sie viele Objekte werden serialisiert.
Hier ist ein Beispiel für die Nutzung zwischen den beiden. (Sollte in aktuellen Versionen von Python 2.7 und Python 3.x arbeiten).
pickle
Beispiel
import pickle
integers = [1, 2, 3, 4, 5]
with open('pickle-example.p', 'wb') as pfile:
pickle.dump(integers, pfile)
Dies wird die integers
Liste in eine binäre Datei-Dump genannt pickle-example.p
.
Versuchen Sie nun, die eingelegte Datei wieder zu lesen.
import pickle
with open('pickle-example.p', 'rb') as pfile:
integers = pickle.load(pfile)
print integers
Die oben ausgeben sollte [1, 2, 3, 4, 5]
.
shelve
Beispiel
import shelve
integers = [1, 2, 3, 4, 5]
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'c')) as shelf:
with shelve.open('shelf-example', 'c') as shelf:
shelf['ints'] = integers
Beachten Sie, wie Sie Objekte hinzufügen das Regal über Wörterbuch-ähnlichen Zugriff.
Lesen Sie das Objekt wieder mit Code wie folgt aus:
import shelve
# If you're using Python 2.7, import contextlib and use
# the line:
# with contextlib.closing(shelve.open('shelf-example', 'r')) as shelf:
with shelve.open('shelf-example', 'r') as shelf:
for key in shelf.keys():
print(repr(key), repr(shelf[key])))
Der Ausgang 'ints', [1, 2, 3, 4, 5]
sein wird.