Data Persistence Модули, рассматриваемые в этой теме, предоставляют возможность сохранения и копирования объектов языка Python: pickle Преобразует объекты языка Python в последовательность байтов и обратно. cPickle Более быстрый вариант модуля pickle. Shelve Сохранение объектов в базе дынных в стиле DMB. marshal Позволяет получить байт-компилированное представление объектов кода (и сопуствующих им объектов) и восстановить объекты из байткомпилированного представления. pickle и cPickle Модули pickle и cPickle определяют следующие конструкторы: Pickler (file [, bin]) Класс (в модуле pickle) или функция (в модуле cPickle), возвращает объект, реализующий “консервирование”. Аргумент file доджен быть файловым объектом, имеющим метод write(). Если задан отличный от нуля аргумент bin (целое число), используется более компактный двоичный формат. Unpickler(file) Класс (в модуле pickle) или функция (в модуле cPickle), возвращает объект, реализующий восстановление “законсервированного” объекта. Аргумнт file должен быть файловым объектом, имеющим методы read() и readline() pickle и cPickle Объекты, возвращаемые конструктором pickler(), имеют следующие (основные) методы: dump(object) “Консервирует” объект object persistent_id(object) Этот метод вызывается для каждого из вложенных объектов Должен возвращать стороку-идентификатор постоянного объекта или None, если объект подлежит консервации. Объекты, возращаемые конструктором Unpickler(), имеют методы, предназначенные для выполнения обратных действий: Load() Восстанавливает и возращает ранее “законсервированный” объект. pickle и cPickle Кроме конструкторов Pickler() и Unpickler() модули определяют следующие функции и объекты данных: dump( object, file [, bin]) “Консервирует” объект object в файл file. load(file) Восстанавливает “законсервированный” объект из файла file и возвращает его. dumps(object [, bin]) Возращает “законсервированное” представаление объекта в виде строки виесто того, чтобы записывать его в файл. loads(string) Восстанавливает “законсервированный” объект из строки string и возвращает его. pickle и cPickle Ниже приведен список объектов, которые могут быть “законсервированы”: None Целые, длинные целые и вещественные числа Прострые строки и строки Unicode Кортежи, списки и словари, содержащие только объекты, которые могут быть “законсервированы”. Классы и функции, определенные в глобальном пространстве имен модуля (на самом деле запоминаются только имена модуля и функции) Экземпляры классов, атрибут __dict__ которых может быть “законсервирован” pickle и cPickle Пример использования: import pickle data1 = {'a': [1, 2.0, 3, 4+6j], 'b': ('string', u'Unicode string'), 'c': None} selfref_list = [1, 2, 3] selfref_list.append(selfref_list) output = open('data.pkl', 'wb') # Pickle dictionary using protocol 0. pickle.dump(data1, output) # Pickle the list using the highest protocol available. pickle.dump(selfref_list, output, -1) output.close() shelve С помощью этого модуля Вы можете создать “стеллаж” (shelf) — объект с интерфейсом словаря, который позволяет сохранять в базе данных в стиле DBM объекты в “законсервированном” виде. Для консервации используется модуль cPickle или pickle, если первый недоступен. open(filename [, flag]) Открывает файл filename с базой данных в стиле DBM и на его основе создает и возвращает объект-стеллаж. Флаг flag используется в качестве второго аргумента в функции anydbm.open() (см. описание модуля anydbm). marshal С помощью этого модуля Вы можете создать “стеллаж” (shelf) — объект с интерфейсом словаря, который позволяет сохранять в базе данных в стиле DBM объекты в “законсервированном” виде. Для консервации используется модуль cPickle или pickle, если первый недоступен. open(filename [, flag]) Открывает файл filename с базой данных в стиле DBM и на его основе создает и возвращает объект-стеллаж. Флаг flag используется в качестве второго аргумента в функции anydbm.open() marshal Этот модуль позволяет получить байт-компилированное представление объектов кода (code), а также сопутствующих им объектов: None; объектов, которые могут быть представлены литеральными выражениями (любые числа и строки); кортежей, списков и словарей, содержащих только объекты, для которых может быть получено байткомпилированное представление.. marshal Модуль определяет следующие функции: dump(object, file) Записывает байт-компилированное представление объекта object в файл. Аргумент file должен быть объектом типа file, открытым для записи в двоичном режиме (’wb’ или ’w+b’). load(file) Считывает байт-компилированное представление для одного объекта из файла, восстанавливает его и возвращает. dumps(object) Возвращает строку с байт-компилированным представлением объекта object. loads(string) Восстанавливает объект из байт-компилированного представления string. Лишние символы в строке игнорируются.