pickle
предназначен для сериализации некоторого объекта (или объектов) в виде единого потока данных в файле.
shelve
основывается на pickle
и реализует словарь сериализации, в котором объекты выбираются, носвязан с ключом (некоторой строкой), так что вы можете загрузить отложенный файл данных и получить доступ к засоленным объектам с помощью ключей.Это может быть более удобно, если вы сериализуете много объектов.
Вот пример использования между ними.(должно работать в последних версиях Python 2.7 и Python 3.x).
pickle
Пример
import pickle
integers = [1, 2, 3, 4, 5]
with open('pickle-example.p', 'wb') as pfile:
pickle.dump(integers, pfile)
Это приведет к выводу списка integers
в двоичный файл с именем pickle-example.p
.
Теперь попробуйте прочитать обратно маринованный файл.
import pickle
with open('pickle-example.p', 'rb') as pfile:
integers = pickle.load(pfile)
print integers
Приведенное выше должно вывести [1, 2, 3, 4, 5]
.
shelve
Пример
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
Обратите внимание, как вы добавляете объекты на полку с помощью словарного доступа.
Считайте объект обратно с помощью кода, подобного следующему:
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])))
Вывод будет 'ints', [1, 2, 3, 4, 5]
.