Файлы shelve

fajly shelve Базы данных и постоянное хранение

Сериализация позволяет сохранять произвольные объекты в файлах и подобных им объектах, но это все же весьма неструктурированный носитель — он не обеспечивает непосредственного простого доступа к членам совокупностей сериализованных объектов. Можно добавлять структуры более высокого уровня, но они не являются внутренне присущими: Порой имеется возможность определить собственную организацию файлов сериализации более высокого уровня с помощью базовой файловой системы (например, можно записать каждый сериализованный объект в файл, имя которого уникально идентифицирует объект), но такая организация не является частью механизма сериализации и должна управляться вручную.

     Можно также записывать словари произвольно большого размера в файл сериализации и обращаться к ним по ключу после загрузки обратно в память, но при этом обратное восстановление из файла загружает весь словарь, а не только тот элемент, в котором мы заинтересованы.

Хранилища, создаваемые модулем shelve, позволяют определить некоторую структуру для совокупностей сериализованных объектов. В файлах этого типа, являющихся стандартной частью системы Python, произвольные объекты Python сохраняются по ключу для извлечения в дальнейшем. В действительности здесь не так много нового — файлы- хранилища являются простой комбинацией файлов DBM и объектов сериализации:

     Чтобы сохра нить находящийся в памяти объект по ключу, модуль shelve сначала сериализует его в строку с помощью модуля pickle, а затем записывает эту строку в файл DBM по ключу с помощью модуля dbm.

     Чтобы за грузить обратно объект по ключу, модуль shelve сначала загружает по ключу строку с сериализованным объектом из файла DBM с помощью модуля dbm, а затем преобразует ее обратно в исходный объект с помощью модуля pickle.

Поскольку внутренняя реализация модуля shelve использует модуль pickle, она может сохранять те же объекты, что и pickle: строки, числа, списки, словари, рекурсивные объекты, экземпляры классов и другие. Поскольку внутренняя реализация модуля shelve использует модуль dbm, она наследует все черты этого модуля, в том числе и его ограничения, касающиеся переносимости.

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

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий