Was ist der Unterschied zwischen Gurke und Regal?

Ich lerne zum ersten Mal über Objekt-Serialisierung. Ich habe versucht zu lesen und "googeln" für Unterschiede in den Modulen Gurke und Regale, aber ich bin mir nicht sicher, ob ich es verstehe. Wann soll man das benutzen? Pickle kann jedes Python-Objekt in den Strom von Bytes umwandeln, die in einer Datei beharrt werden können. Warum brauchen wir dann das Modulregal? Ist Gurke nicht schneller?

One Solution collect form web for “Was ist der Unterschied zwischen Gurke und Regal?”

pickle ist für die Serialisierung ein Objekt (oder Objekte) als ein einziger Bytestream in einer Datei.

shelve baut auf der pickle und implementiert ein Serialisierungswörterbuch, bei dem Objekte gebeizt werden, aber mit einem Schlüssel (einiger String) verbunden sind, so dass Sie Ihre shelve laden und über die Tasten auf Ihre gebeizten Objekte zugreifen können. Das könnte bequemer sein, wenn du viele Objekte serialisierst.

Hier ist ein Beispiel für die Nutzung zwischen den beiden. (Sollte in den neuesten 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ärdatei mit dem Namen pickle-example.p .

Versuche nun, die gebeizte Datei wieder zu lesen.

 import pickle with open('pickle-example.p', 'rb') as pfile: integers = pickle.load(pfile) print integers 

Die obigen Ergebnisse sollten ausgegeben werden [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 über den Wörterbuch-ähnlichen Zugriff zum Regal hinzufügen.

Lesen Sie das Objekt zurück mit Code wie die folgenden:

 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 wird 'ints', [1, 2, 3, 4, 5] .

Python ist die beste Programmiersprache der Welt.