Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 176

230

Глава 8. Данные должны куда-то попадать

Сериализация с помощью pickle

Сохранение структур данных в файл называется сериализацией. Форматы вроде

JSON могут требовать наличия пользовательских преобразователей для сериали-

зации всех типов данных программы, написанной на Python. Python предоставля-

ет модуль pickle, позволяющий сохранить и восстановить любой объект в специ-

альном бинарном формате.

Помните, как JSON сошел с ума, когда встретил объект datetime? Для pickle это

не проблема:

>>> import pickle

>>> import datetime

>>> now1 = datetime.datetime.utcnow()

>>> pickled = pickle.dumps(now1)

>>> now2 = pickle.loads(pickled)

>>> now1

datetime.datetime(2014, 6, 22, 23, 24, 19, 195722)

>>> now2

datetime.datetime(2014, 6, 22, 23, 24, 19, 195722)

pickle работает также с вашими собственными классами и объектами. Мы опре-

делим небольшой класс, который называется Tiny и возвращает слово 'tiny', когда

он используется как строка:

>>> import pickle

>>> class Tiny():

... def __str__(self):

... return 'tiny'

...

>>> obj1 = Tiny()

>>> obj1

<__main__.Tiny object at 0x10076ed10>

>>> str(obj1)

'tiny'

>>> pickled = pickle.dumps(obj1)

>>> pickled

b'\x80\x03c__main__\nTiny\nq\x00)\x81q\x01.'

>>> obj2 = pickle.loads(pickled)

>>> obj2

<__main__.Tiny object at 0x10076e550>

>>> str(obj2)

'tiny'

pickled — это обработанная pickle бинарная строка, созданная из объекта obj1.

Мы преобразовали ее в объект obj2, чтобы сделать копию объекта obj1. Используй-

те функцию dump(), чтобы pickle сохранил данные в файл, и функцию load(), чтобы

pickle загрузил данные из файла.

Структурированные бинарные файлы

231

Поскольку pickle может создавать объекты Python, к нему применимы предупреждения

о безо пасности, которые были рассмотрены ранее. Не загружайте в pickle данные, которым

не доверяете.

Структурированные бинарные файлы