Структурированные текстовые файлы
223
tag: lunch attributes: {'hours': '11-3'}
tag: item attributes: {'price': '$5.00'}
tag: dinner attributes: {'hours': '3-10'}
tag: item attributes: {'price': '8.00'}
>>> len(root) # количество разделов menu
3
>>> len(root[0]) # количество элементов breakfast
2
Для каждого элемента вложенных списков tag — это строка тега, а attrib — это
словарь его атрибутов. Библиотека ElementTree имеет множество других спосо-
бов поиска данных, организованных в формате XML, модификации этих данных
и даже записи XML-файлов. Все детали изложены в документации библиотеки
ElementTree (http://bit.ly/elementtree).
Среди других библиотек для работы с XML в Python можно отметить следу-
ющие:
xml.dom. The Document Object Model (DOM), знакомая разработчикам на
JavaScript, представляет веб-документы как иерархические структуры. Этот
модуль загружает XML-файл в память целиком и позволяет вам получать до-
ступ ко всем его частям;
xml.sax. Simple API for XML, или SAX, разбирает XML на ходу, поэтому он
не загружает в память сразу весь документ. Он может стать хорошим выбором,
если вам нужно обработать очень большие потоки XML.
HTML
Огромные объемы данных сохраняются в формате гипертекстового языка размет-
ки (Hypertext Markup Language, HTML), это основной формат документов в сети
Интернет. Проблема заключается в том, что значительная часть этих докумен-
тов не соответствует правилам формата HTML, поэтому его трудно разобрать.
Помимо этого, большая часть HTML предназначена для того, чтобы форматировать
выводимую информацию, а не обмениваться данными. Поскольку эта глава пред-
назначена для того, чтобы описать относительно хорошо определенные форматы
данных, я вынес рассмотрение HTML в главу 9.
JSON
JavaScript Object Notation (JSON) (http://www.json.org/) стал очень популярным
форматом обмена данными, вышедшим за пределы языка JavaScript. Формат JSON
является частью языка JavaScript и часто содержит легальный с точки зрения
Python синтаксис. Он хорошо подходит Python, что делает его хорошим выбором
при определении формата данных для обмена между программами. Вы увидите
множество примеров использования JSON при веб-разработке в главе 9.
224
Глава 8. Данные должны куда-то попадать
В отличие от XML, для которого написано множество модулей, для JSON су-
ществует всего один модуль с простым именем json. Эта программа кодирует (вы-
гружает) данные в строку JSON и декодирует (загружает) строку JSON обратно.
В следующем примере мы создадим структуру данных, содержащую данные из
предыдущего примера, где описывался формат XML:
>>> menu = \
... {