>>> obj2 = pickle.loads(pickled)

>>> obj2

<__main__.Tiny object at 0x10076e550>

>>> str(obj2)

'tiny'

pickled — это обработанная pickle бинарная строка, созданная из объекта obj1. Мы преобразовали ее в объект obj2, чтобы сделать копию объекта obj1. Используйте функцию dump(), чтобы pickle сохранил данные в файл, и функцию load(), чтобы pickle загрузил данные из файла.

Поскольку pickle может создавать объекты Python, к нему применимы предупреждения о безопасности, которые были рассмотрены ранее. Не загружайте в pickle данные, которым не доверяете.

<p>Структурированные бинарные файлы</p>

Некоторые файловые форматы были разработаны для того, чтобы хранить определенные структуры данных, и они не являются ни реляционными, ни базами данных NoSQL. В следующих разделах рассказывается о некоторых из них.

<p>Электронные таблицы</p>

Электронные таблицы, в частности Microsoft Excel, — это широко распространенный формат данных. Если вы можете сохранить свою таблицу в CSV-файл, то можете считать его с помощью стандартного модуля csv, который был описан ранее. Если у вас есть бинарный файл xls, для его считывания и записи можете использовать стороннюю библиотеку xlrd.

<p>HDF5</p>

HDF5 (http://www.hdfgroup.org/why_hdf) — это бинарный формат данных, предназначенный для хранения многомерных или иерархических числовых данных. Обычно он используется в научных целях, где быстрый случайный доступ к крупным наборам данных (от гигабайтов до терабайтов) является распространенным требованием. Несмотря на то что HDF5 в некоторых случаях мог бы стать хорошей альтернативой базам данных, по каким-то причинам этот формат практически неизвестен в современном мире. Он лучше всего подходит для приложений вида WORM (write once/read many — «запиши однажды — считай много раз»), которые не нуждаются в защите от конфликтующих записей. Вы можете счесть полезными следующие модули:

• h5py — является интерфейсом низкого уровня с широкими возможностями. Прочтите его документацию (http://www.h5py.org/) и код (https://github.com/h5py/h5py);

• PyTables — это интерфейс немного более высокого уровня, имеющий некоторые особенности, характерные для баз данных. Прочтите его документацию (http://www.pytables.org/) и код (http://pytables.github.com/).

Оба этих формата рассматриваются в приложении В с точки зрения применения в научных приложениях, написанных на Python. Здесь я упоминаю об HDF5 затем, чтобы у вас был под рукой нестандартный вариант на случай, когда вам нужно сохранять и вычитывать крупные объемы данных. Хорошим примером использования этого формата является Million Song Dataset (http://bit.ly/millionsong), содержащий информацию о песнях.

<p>Реляционные базы данных</p>

Реляционным базам данных всего около 40 лет, но в компьютерном мире они используются повсеместно. Вам практически наверняка придется поработать с ними. В эти моменты вы сможете оценить следующие их преимущества.

• Доступ к данным возможен для нескольких пользователей одновременно.

• Действует защита от повреждения данных пользователями.

• Существуют эффективные методы сохранения и считывания данных.

• Данные определяются схемами, их можно ограничить.

• Объединения позволяют найти отношения между различными типами данных.

• Декларативный (в противоположность императивному) язык запросов SQL (Structured Query Language, структурированный язык запросов).

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

Таблица представляет собой сетку с рядами и графами, похожую на электронную таблицу. Чтобы создать таблицу, необходимо указать ее имя и порядок, имена и типы ее граф. Каждый ряд имеет одинаковые графы, однако графа может быть определена так, что в ней можно ничего не размещать (null). В примере с меню вы могли бы создать таблицу, содержащую по одному ряду для каждого продаваемого элемента. Каждый элемент имеет одинаковые графы, включая ту, которая хранит цену.

Первичным ключом таблицы является графа или группа граф, их значения должны быть уникальными. Это предотвращает ввод одинаковых данных в таблицу. Этот ключ индексируется для более быстрого поиска по время выполнения запроса. Работа индекса немного похожа на алфавитный указатель, что позволяет быстро найти определенный ряд.

Перейти на страницу:

Все книги серии Бестселлеры O'Reilly

Похожие книги