Вопрос

Я изучаю об объекте сериализации в первый раз. Я попробовал читать и «гугла» для различий в модулях сортировщика и полки, но я не уверен, что понимаю это. Когда использовать какой? Парил может превратить каждый объект Python в поток байтов, которые могут быть сохранены в файл. Тогда почему нам нужен полза модуля? Не сортирует быстрее?

Это было полезно?

Решение

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].

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top