>>> 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 данные, которым не доверяете.
Структурированные бинарные файлы
Некоторые файловые форматы были разработаны для того, чтобы хранить определенные структуры данных, и они не являются ни реляционными, ни базами данных NoSQL. В следующих разделах рассказывается о некоторых из них.
Электронные таблицы
Электронные таблицы, в частности Microsoft Excel, — это широко распространенный формат данных. Если вы можете сохранить свою таблицу в CSV-файл, то можете считать его с помощью стандартного модуля csv, который был описан ранее. Если у вас есть бинарный файл xls, для его считывания и записи можете использовать стороннюю библиотеку xlrd.
HDF5
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), содержащий информацию о песнях.
Реляционные базы данных
Реляционным базам данных всего около 40 лет, но в компьютерном мире они используются повсеместно. Вам практически наверняка придется поработать с ними. В эти моменты вы сможете оценить следующие их преимущества.
• Доступ к данным возможен для нескольких пользователей одновременно.
• Действует защита от повреждения данных пользователями.
• Существуют эффективные методы сохранения и считывания данных.
• Данные определяются
•
• Декларативный (в противоположность императивному) язык запросов SQL (Structured Query Language, структурированный язык запросов).
Такие базы данных называются
Таблица представляет собой сетку с рядами и графами, похожую на электронную таблицу. Чтобы создать таблицу, необходимо указать ее имя и порядок, имена и типы ее граф. Каждый ряд имеет одинаковые графы, однако графа может быть определена так, что в ней можно ничего не размещать (null). В примере с меню вы могли бы создать таблицу, содержащую по одному ряду для каждого продаваемого элемента. Каждый элемент имеет одинаковые графы, включая ту, которая хранит цену.