Глава 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 данные, которым
не доверяете.
Структурированные бинарные файлы