Рубрики
Без рубрики

Сохранение данных и обмен

Автор оригинала: Doug Hellmann.

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

Два модуля преобразуют объекты в формат, который можно передавать или сохранять (процесс, известный как сериализация ). Наиболее распространено использование pickle для сохранения, поскольку он интегрирован с некоторыми другими стандартными библиотечными модулями, которые фактически хранят сериализованные данные, такими как shelve . Однако json чаще используется для веб-приложений, поскольку он лучше интегрируется с существующими инструментами хранения веб-сервисов.

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

Самый простой способ воспользоваться преимуществами формата DBM – это полка. Откройте файл полки и получите доступ к нему через API, похожий на словарь. Объекты, сохраненные в базе данных, автоматически обрабатываются и сохраняются без каких-либо дополнительных действий со стороны вызывающего абонента.

Однако одним из недостатков shelve является то, что при использовании интерфейса по умолчанию невозможно предсказать, какой формат DBM будет использоваться, поскольку он выбирает один на основе библиотек, доступных в системе, в которой находится база данных. созданный. Формат не имеет значения, если приложению не нужно будет совместно использовать файлы базы данных между хостами с разными библиотеками, но если переносимость является требованием, используйте один из классов в модуле, чтобы убедиться, что выбран конкретный формат.

Для веб-приложений, которые уже работают с данными в JSON, использование json и dbm обеспечивает еще один механизм сохранения. Непосредственное использование dbm – это немного больше работы, чем shelve , потому что ключи и значения базы данных DBM должны быть строками, и объекты не будут повторно созданы автоматически при обращении к значению в базе данных.

Внутрипроцессная реляционная база данных sqlite3 доступна в большинстве дистрибутивов Python для хранения данных в более сложных схемах, чем пары ключ/значение. Он хранит свою базу данных в памяти или в локальном файле, и весь доступ осуществляется из одного и того же процесса, поэтому нет задержек сетевого взаимодействия. Компактный характер sqlite3 делает его особенно хорошо подходящим для встраивания в настольные приложения или версии веб-приложений для разработки.

Существуют также модули для синтаксического анализа более формально определенных форматов, которые полезны для обмена данными между программами Python и приложениями, написанными на других языках. xml.etree.ElementTree может анализировать XML-документы и предоставляет несколько режимов работы для разных приложений. Помимо инструментов синтаксического анализа, ElementTree включает интерфейс для создания правильно сформированных XML-документов из объектов в памяти. Модуль csv может читать и записывать табличные данные в форматах, созданных электронными таблицами или приложениями баз данных, что делает его полезным для массовой загрузки данных или преобразования данных из одного формата в другой.

  • pickle – Сериализация объекта
  • полка – постоянное хранилище объектов
  • dbm – Базы данных ключей и значений Unix
  • sqlite3 – встроенная реляционная база данных
  • xml.etree.ElementTree – API обработки XML
  • csv – файлы значений, разделенных запятыми