10
Data Persistence Модули, рассматриваемые в этой теме, предоставляют возможность сохранения и копирования объектов языка Python: pickle Преобразует объекты языка Python в последовательность байтов и обратно. cPickle Более быстрый вариант модуля pickle. Shelve Сохранение объектов в базе дынных в стиле DMB. marshal Позволяет получить байт-компилированное представление объектов кода (и сопуствующих им объектов) и восстановить объекты из байт-компилированного представления.

Data Persistence

Embed Size (px)

DESCRIPTION

Data Persistence. Модули, рассматриваемые в этой теме, предоставляют возможность сохранения и копирования объектов языка Python: pickle Преобразует объекты языка Python в последовательность байтов и обратно. cPickle Более быстрый вариант модуля pickle. Shelve - PowerPoint PPT Presentation

Citation preview

Page 1: Data Persistence

Data Persistence

Модули, рассматриваемые в этой теме, предоставляют возможность сохранения и копирования объектов языка Python:

pickle Преобразует объекты языка Python в последовательность байтов и обратно. cPickle Более быстрый вариант модуля pickle. Shelve Сохранение объектов в базе дынных в стиле DMB. marshal Позволяет получить байт-компилированное представление объектов кода (и

сопуствующих им объектов) и восстановить объекты из байт-компилированного представления.

Page 2: Data Persistence

pickle и cPickle

Модули pickle и cPickle определяют следующие конструкторы: Pickler (file [, bin]) Класс (в модуле pickle) или функция (в модуле cPickle),

возвращает объект, реализующий “консервирование”. Аргумент file доджен быть файловым объектом, имеющим метод write(). Если задан отличный от нуля аргумент bin (целое число), используется более компактный двоичный формат.

Unpickler(file) Класс (в модуле pickle) или функция (в модуле cPickle),

возвращает объект, реализующий восстановление “законсервированного” объекта. Аргумнт file должен быть файловым объектом, имеющим методы read() и readline()

Page 3: Data Persistence

pickle и cPickle

Объекты, возвращаемые конструктором pickler(), имеют следующие (основные) методы:

dump(object) “Консервирует” объект object persistent_id(object) Этот метод вызывается для каждого из вложенных объектов

Должен возвращать стороку-идентификатор постоянного объекта или None, если объект подлежит консервации.

Объекты, возращаемые конструктором Unpickler(), имеют методы, предназначенные для выполнения обратных действий:

Load() Восстанавливает и возращает ранее “законсервированный”

объект.

Page 4: Data Persistence

pickle и cPickle

Кроме конструкторов Pickler() и Unpickler() модули определяют следующие функции и объекты данных:

dump( object, file [, bin]) “Консервирует” объект object в файл file. load(file) Восстанавливает “законсервированный” объект из файла file и

возвращает его. dumps(object [, bin]) Возращает “законсервированное” представаление объекта в виде

строки виесто того, чтобы записывать его в файл. loads(string) Восстанавливает “законсервированный” объект из строки string и

возвращает его.

Page 5: Data Persistence

pickle и cPickle

Ниже приведен список объектов, которые могут быть “законсервированы”:

None Целые, длинные целые и вещественные числа Прострые строки и строки Unicode Кортежи, списки и словари, содержащие только объекты, которые

могут быть “законсервированы”. Классы и функции, определенные в глобальном пространстве

имен модуля (на самом деле запоминаются только имена модуля и функции)

Экземпляры классов, атрибут __dict__ которых может быть “законсервирован”

Page 6: Data Persistence

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()

Page 7: Data Persistence

shelve

С помощью этого модуля Вы можете создать “стеллаж” (shelf) — объект с интерфейсом словаря, который позволяет сохранять в базе данных в стиле DBM объекты в “законсервированном” виде. Для консервации используется модуль cPickle или pickle, если первый недоступен.

open(filename [, flag]) Открывает файл filename с базой данных в стиле DBM и на его

основе создает и возвращает объект-стеллаж. Флаг flag используется в качестве второго аргумента в функции anydbm.open() (см. описание модуля anydbm).

Page 8: Data Persistence

marshal

С помощью этого модуля Вы можете создать “стеллаж” (shelf) — объект с интерфейсом словаря, который позволяет сохранять в базе данных в стиле DBM объекты в “законсервированном” виде. Для консервации используется модуль cPickle или pickle, если первый недоступен.

open(filename [, flag]) Открывает файл filename с базой данных в стиле DBM и на его

основе создает и возвращает объект-стеллаж. Флаг flag используется в качестве второго аргумента в функции anydbm.open()

Page 9: Data Persistence

marshal

Этот модуль позволяет получить байт-компилированное представление объектов кода (code), а также сопутствующих им объектов: None; объектов, которые могут быть представлены литеральными выражениями (любые числа и строки); кортежей, списков и словарей, содержащих только объекты, для которых может быть получено байткомпилированное представление..

Page 10: Data Persistence

marshal

Модуль определяет следующие функции:

dump(object, file) Записывает байт-компилированное представление объекта

object в файл. Аргумент file должен быть объектом типа file, открытым для записи в двоичном режиме (’wb’ или ’w+b’).

load(file) Считывает байт-компилированное представление для одного

объекта из файла, восстанавливает его и возвращает. dumps(object) Возвращает строку с байт-компилированным представлением

объекта object. loads(string) Восстанавливает объект из байт-компилированного представления

string. Лишние символы в строке игнорируются.