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?

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top