>>> tree = et.ElementTree(file='menu.xml')

>>> root = tree.getroot()

>>> root.tag

'menu'

>>> for child in root:

…·····print('tag:', child.tag, 'attributes:', child.attrib)

·····for grandchild in child:

…·········print('\ttag:', grandchild.tag, 'attributes:', grandchild.attrib)

tag: breakfast attributes: {'hours': '7-11'}

····tag: item attributes: {'price': '$6.00'}

····tag: item attributes: {'price': '$4.00'}

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.

<p>HTML</p>

Огромные объемы данных сохраняются в формате гипертекстового языка разметки (Hypertext Markup Language, HTML), это основной формат документов в сети Интернет. Проблема заключается в том, что значительная часть этих документов не соответствует правилам формата HTML, поэтому его трудно разобрать. Помимо этого, большая часть HTML предназначена для того, чтобы форматировать выводимую информацию, а не обмениваться данными. Поскольку эта глава предназначена для того, чтобы описать относительно хорошо определенные форматы данных, я вынес рассмотрение HTML в главу 9.

<p>JSON</p>

JavaScript Object Notation (JSON) (http://www.json.org/) стал очень популярным форматом обмена данными, вышедшим за пределы языка JavaScript. Формат JSON является частью языка JavaScript и часто содержит легальный с точки зрения Python синтаксис. Он хорошо подходит Python, что делает его хорошим выбором при определении формата данных для обмена между программами. Вы увидите множество примеров использования JSON при веб-разработке в главе 9.

В отличие от XML, для которого написано множество модулей, для JSON существует всего один модуль с простым именем json. Эта программа кодирует (выгружает) данные в строку JSON и декодирует (загружает) строку JSON обратно. В следующем примере мы создадим структуру данных, содержащую данные из предыдущего примера, где описывался формат XML:

>>> menu = \

… {

… "breakfast": {

…·········"hours": "7-11",

…·········"items": {

…·················"breakfast burritos": "$6.00",

…·················"pancakes": "$4.00"

…·················}

…·········},

… "lunch": {

…·········"hours": "11-3",

…·········"items": {

…·················"hamburger": "$5.00"

…·················}

…·········},

… "dinner": {

…·········"hours": "3-10",

…·········"items": {

…·················"spaghetti": "$8.00"

…·················}

…·········}

… }

.

Далее закодируем структуру данных (menu) в строку JSON (menu_json) с помощью функции dumps():

>>> import json

>>> menu_json = json.dumps(menu)

>>> menu_json

'{"dinner": {"items": {"spaghetti": "$8.00"}, "hours": "3-10"},

"lunch": {"items": {"hamburger": "$5.00"}, "hours": "11-3"},

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

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

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