11._Data_Persistence

advertisement
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. Лишние символы в строке игнорируются.

Download