справочник по Python. мм isbn 9785932861578 9 785932 861578
Скачать 4.21 Mb.
|
[, strict]) Добавляет в отображение новый тип MIME. В аргументе type передается тип MIME, такой как ‘text/plain’, в аргументе ext – расширение имени файла, такое как ‘.txt’, и в аргументе strict – логический флаг, который указывает, является ли данный тип MIME официально зарегистрирован- MIME официально зарегистрирован- официально зарегистрирован- ным. По умолчанию принимает значение True. Модуль quopri Модуль quopri обеспечивает преобразование строк байтов в формат ‘quoted- printable’ и обратно. Этот формат в основном используется для кодирова- и обратно. Этот формат в основном используется для кодирова- обратно. Этот формат в основном используется для кодирова- обратно. Этот формат в основном используется для кодирова- . Этот формат в основном используется для кодирова- Этот формат в основном используется для кодирова- ния текста с 8-битовыми символами, большая часть которых читается при использовании кодировки ASCII, но среди которых может содержаться не- ASCII, но среди которых может содержаться не- , но среди которых может содержаться не- большое количество непечатаемых или специальных символов (например, символы в диапазоне 128-255). Ниже перечислены правила, которые при- меняются при преобразовании символов в формат ‘quoted-printable’: Модуль quopri 705 • Любой печатаемый, не пробельный символ ASCII, за исключением ‘=’, представляет сам себя. • Символ ‘=’ используется как экранирующий символ. Когда за ним сле- дуют две шестнадцатеричные цифры, они представляют символ с ука- занным значением (например, ‘=0C’). Сам знак равенства представляет- ся, как ‘=3D’. Если символ ‘=’ появляется в конце строки, он обозначает мягкий перенос строки. Такой перенос используется, только если длин- ную входную строку следует разбить на несколько выходных строк. • Пробелы и табуляции остаются без изменений, но в конце строки они могут удаляться. Этот формат часто используется для оформления документов, содержащих специальные символы из расширенного набора символов ASCII. Напри- ASCII. Напри- . Напри- мер, если документ содержит текст «Copyright © 2009», в языке Python его можно было бы представить в виде строки байтов b’Copyright \xa9 2009’. Та же строка в формате ‘quoted-printable’ выглядит как b’Copyright =A9 2009’, где специальный символ ‘\xa9’ был замещен экранированной последова- тельностью ‘=A9’. decode(input, output [, header]) Декодирует данные в формате ‘quoted-printable’. В аргументах input и out- put передаются объекты, похожие на файлы, открытые в двоичном режиме. Если в аргументе header передается значение True, то символ подчеркива- ния (_) будет интерпретироваться как пробел. В противном случае он будет оставаться без изменений. Эту особенность можно использовать при пре- образовании заголовков MIME. По умолчанию принимает значение False. decodestring(s [, header]) Декодирует строку s с данными в формате ‘quoted-printable’. В аргументе s можно передать строку Юникода или строку байтов, но результат всегда будет строкой байтов. Аргумент header имеет тот же смысл, что и в функ- ции decode(). encode(input, output, quotetabs [, header]) Преобразует данные в формат ‘quoted-printable’. В аргументах input и out- put передаются объекты, похожие на файлы, открытые в двоичном ре- передаются объекты, похожие на файлы, открытые в двоичном ре- объекты, похожие на файлы, открытые в двоичном ре- объекты, похожие на файлы, открытые в двоичном ре- , похожие на файлы, открытые в двоичном ре- похожие на файлы, открытые в двоичном ре- на файлы, открытые в двоичном ре- на файлы, открытые в двоичном ре- файлы, открытые в двоичном ре- файлы, открытые в двоичном ре- , открытые в двоичном ре- открытые в двоичном ре- в двоичном ре- в двоичном ре- двоичном ре- двоичном ре- ре- ре- жиме. Если в аргументе quotetabs передается значение True, в дополнение к обычным правилам символы табуляции также будут замещаться экра- нированными последовательностями. В противном случае они останутся в неизменном виде. По умолчанию аргумент quotetabs принимает значение False . Аргумент header имеет тот же смысл, что и в функции decode(). encodestring(s [, quotetabs [, header]]) Преобразует строку байтов s в формат ‘quoted-printable’. Результат всег- да является строкой байтов. Аргументы quotetabs и header имеют тот же смысл, что и в функции encode(). Примечания Формат quoted-printable появился раньше Юникода и может применяться толь- ко для представления 8-битовых данных. Хотя обычно этот формат используется 706 Глава 24. Обработка и представление данных в Интернете для преобразования текста, в действительности он применяется только к сим- волам ASCII и к символам из расширенного набора ASCII, которые могут быть представлены одиночными байтами. При использовании этого модуля убедитесь, что файлы открыты в двоичном режиме, а строковые значения передаются в виде строк байтов. Пакет xml В состав стандартной библиотеки языка Python входят несколько модулей, предназначенных для обработки данных в формате XML. Тема обработки XML-документов слишком большая, и ее обсуждение выходит далеко за рамки этой книги. В этом разделе предполагается, что читатель уже зна- ком с основными понятиями, касающимися XML. Для изучения основ XML можно порекомендовать книги, такие как «Inside XML» Стива Холз- можно порекомендовать книги, такие как «Inside XML» Стива Холз- Inside XML» Стива Холз- XML» Стива Холз- XML» Стива Холз- » Стива Холз- нера (Steve Holzner) (New Riders) или «XML in a Nutshell» Эллиотта Гароль- Steve Holzner) (New Riders) или «XML in a Nutshell» Эллиотта Гароль- Holzner) (New Riders) или «XML in a Nutshell» Эллиотта Гароль- Holzner) (New Riders) или «XML in a Nutshell» Эллиотта Гароль- ) (New Riders) или «XML in a Nutshell» Эллиотта Гароль- New Riders) или «XML in a Nutshell» Эллиотта Гароль- Riders) или «XML in a Nutshell» Эллиотта Гароль- Riders) или «XML in a Nutshell» Эллиотта Гароль- ) или «XML in a Nutshell» Эллиотта Гароль- XML in a Nutshell» Эллиотта Гароль- in a Nutshell» Эллиотта Гароль- in a Nutshell» Эллиотта Гароль- a Nutshell» Эллиотта Гароль- a Nutshell» Эллиотта Гароль- Nutshell» Эллиотта Гароль- Nutshell» Эллиотта Гароль- » Эллиотта Гароль- да (Elliotte Harold) и У. Скотта Менса (W. Scott Means) (O’Reilly and Associ- Elliotte Harold) и У. Скотта Менса (W. Scott Means) (O’Reilly and Associ- Harold) и У. Скотта Менса (W. Scott Means) (O’Reilly and Associ- Harold) и У. Скотта Менса (W. Scott Means) (O’Reilly and Associ- ) и У. Скотта Менса (W. Scott Means) (O’Reilly and Associ- W. Scott Means) (O’Reilly and Associ- . Scott Means) (O’Reilly and Associ- Scott Means) (O’Reilly and Associ- Means) (O’Reilly and Associ- Means) (O’Reilly and Associ- ) (O’Reilly and Associ- O’Reilly and Associ- ’Reilly and Associ- Reilly and Associ- and Associ- and Associ- Associ- Associ- ates). Существует несколько книг, посвященных обработке XML на языке Python, включая «Python & XML» Кристофера Джонса (Christopher Jones) (O’Reilly and Associates) и «XML Processing with Python» Сина Макграта (Sean McGrath) (Prentice Hall). Язык Python обеспечивает два вида поддержки формата XML. Первый тип – базовая поддержка двух основных стандартов парсинга XML, SAX и DOM. Стандарт SAX (Simple API for XML – простой прикладной интер- SAX (Simple API for XML – простой прикладной интер- (Simple API for XML – простой прикладной интер- Simple API for XML – простой прикладной интер- API for XML – простой прикладной интер- API for XML – простой прикладной интер- for XML – простой прикладной интер- for XML – простой прикладной интер- XML – простой прикладной интер- XML – простой прикладной интер- – простой прикладной интер- фейс для работы с форматом XML) основан на обработке событий, когда выполняется чтение XML-документа, и по мере того как встречаются эле- XML-документа, и по мере того как встречаются эле- -документа, и по мере того как встречаются эле- менты разметки XML, вызываются функции-обработчики, выполняющие обработку этих элементов. Стандарт DOM (Document Object Model – объект- DOM (Document Object Model – объект- (Document Object Model – объект- Document Object Model – объект- Object Model – объект- Object Model – объект- Model – объект- Model – объект- – объект- ная модель документов) основывается на представлении XML-документа в виде древовидной структуры. После построения дерева документа предо- ставляется возможность с помощью интерфейса DOM выполнять обход эле- DOM выполнять обход эле- выполнять обход эле- ментов дерева и извлекать данные. Ни SAX, ни DOM не являются интер- SAX, ни DOM не являются интер- , ни DOM не являются интер- DOM не являются интер- не являются интер- фейсами, свойственными исключительно языку Python. В языке Python просто реализован стандартный программный интерфейс, разработанный ранее для языков Java и JavaScript. Вы можете реализовать обработку XML-документов в своих программах, используя интерфейсы SAX и DOM, однако наиболее удобным программ- SAX и DOM, однако наиболее удобным программ- и DOM, однако наиболее удобным программ- DOM, однако наиболее удобным программ- , однако наиболее удобным программ- ным интерфейсом в стандартной библиотеке является интерфейс Element- Element- Tree. Этот интерфейс реализует характерный для Python подход к обра- Python подход к обра- подход к обра- ботке XML-документов, использующий все преимущества языка Python, и который большинство пользователей считают более простым и более бы- стрым по сравнению с SAX или DOM. В оставшейся части раздела будут рассматриваться все три подхода к обработке XML-документов, но интер- XML-документов, но интер- -документов, но интер- фейс ElementTree будет рассматриваться особенно подробно. Основное внимание в этом разделе будет уделяться только синтаксическо- му анализу данных в формате XML. Однако в состав стандартной библио- XML. Однако в состав стандартной библио- . Однако в состав стандартной библио- Пакет xml 707 теки языка Python входят модули, позволяющие реализовать новые типы парсеров, создавать новые документы XML с самого начала и так далее. Кроме того, существует множество сторонних расширений, добавляю- щих дополнительные возможности, такие как поддержка языков XSLT и XPATH. Ссылки на страницы с дополнительной информацией можно найти по адресу http://wiki.python.org/moin/PythonXml. Пример документа XML Ниже приводится пример типичного документа XML, в данном случае – описание рецепта. A southwest favorite! Combine all ingredients and hand whisk to desired consistency. Serve and enjoy with ice-cold beers. Документ состоит из элементов, которые начинаются и оканчиваются те- гами, например: . Обычно элементы могут вкладываться друг в друга и образовывать иерархии, например элементы При работе с XML-документами обычно приходится иметь дело со всеми этими основными особенностями. Например, может потребоваться извле- кать текст и атрибуты из элементов определенных типов. Чтобы отыскать требуемые элементы, необходимо выполнить обход дерева документа, на- чиная с корневого элемента. 708 Глава 24. Обработка и представление данных в Интернете Модуль xml.dom.minidom М одуль xml.dom.minidom обеспечивает поддержку парсинга XML-документов и сохранение результатов в памяти, в виде древовидной структуры, соот- ветствующей стандарту DOM. В модуле имеется две функции, выполняю- DOM. В модуле имеется две функции, выполняю- . В модуле имеется две функции, выполняю- щие парсинг: parse(file [, parser]) Анализирует содержимое файла file и возвращает узел, представляющий вершину дерева документа. В аргументе file передается имя файла или объект файла, открытый для чтения. В необязательном аргументе parser можно передать SAX2-совместимый объект парсера, который будет ис- SAX2-совместимый объект парсера, который будет ис- 2-совместимый объект парсера, который будет ис- пользоваться для конструирования дерева. Если этот аргумент опущен, будет использоваться парсер по умолчанию. parseString(string [, parser]) То же, что и parse(), за исключением того, что входные данные передаются в виде строки, а не в виде файла. Узлы Дерево документа, возвращаемое функциями парсинга, представляет со- бой коллекцию узлов, связанных между собой. Каждый объект n, пред- ставляющий узел, обладает следующими атрибутами, которые могут ис- пользоваться для извлечения информации и при обходе дерева: Атрибут узла Описание n.attributes Объект отображения, хранящий значения атрибутов (если имеются). n.childNodes Список всех дочерних узлов для узла n. n.firstChild Первый дочерний узел для узла n. n.lastChild Последний дочерний узел для узла n. n.localName Локальное имя элемента. Если в имени тега присутствует двоеточие (например, ‘ n.namespaceURI Пространство имен, ассоциированное с узлом n (если имеется). n.nextSibling Узел, следующий за данным узлом n в дереве и относящийся к тому же родительскому узлу. Если узел является последним среди узлов того же уровня, этот атрибут получает значение None n.nodeName Имя узла. Смысл зависит от типа узла. n.nodeType Целое число, описывающее тип узла. Принимает одно из сле- дующих значений, которые являются атрибутами класса Node: ATTRIBUTE_NODE , CDATA_SECTION_NODE, COMMENT_NODE, DOCUMENT_ FRAGMENT_NODE , DOCUMENT_NODE, DOCUMENT_TYPE_NODE, ELEMENT_NODE, ENTITY_NODE , ENTITY_REFERENCE_NODE, NOTATION_NODE, PROCESSING_IN- STRUCTION_NODE или TEXT_NODE. Пакет xml 709 Атрибут узла Описание n.nodeValue Значение узла. Смысл зависит от типа узла. n.parentNode Ссылка на родительский узел. n.prefix Часть имени тега, предшествующая двоеточию. Например, для элемента ‘ n.previousSibling Узел, предшествующий данному узлу n в дереве и относящий- ся к тому же родительскому узлу. Кроме этих атрибутов, все узлы обладают следующими методами. Обычно они используются для манипулирования структурой дерева. n.appendChild(child) Добавляет новый дочерний узел child в узел n. Новый узел добавляется по- сле последнего дочернего узла. n.cloneNode(deep) Создает копию узла n. Если в аргументе deep передается значение True, все дочерние узлы также будут скопированы. n.hasAttributes() Возвращает True, если узел имеет какие-либо атрибуты. n.hasChildNodes() Возвращает True, если узел имеет какие-либо дочерние узлы. n.insertBefore(newchild, ichild) Вставляет новый дочерний узел newchild перед другим дочерним узлом ich- ild . Узел ichild уже должен быть дочерним узлом для n. n.isSameNode(other) Возвращает True, если узел other ссылается на тот же узел DOM, что и n. n.normalize() Объединяет смежные текстовые узлы в один текстовый узел. n.removeChild(child) Удаляет дочерний узел child из узла n. n.replaceChild(newchild,oldchild) Замещает дочерний узел oldchild узлом newchild. Узел oldchild должен быть дочерним узлом для узла n. Несмотря на многообразие типов узлов, которые могут присутствовать в дереве документа, все-таки наиболее часто приходится работать с узлами типа Document, Element и Text. Далее коротко описывается каждый из этих типов. 710 Глава 24. Обработка и представление данных в Интернете Узлы типа Document У зел d типа Document располагается на вершине дерева документа и пред- ставляет документ целиком. Он обладает следующими атрибутами и ме- тодами: d.documentElement Содержит корневой элемент всего документа. d.getElementsByTagName(tagname) Отыскивает все дочерние узлы и возвращает список элементов с именами тегов tagname. d.getElementsByTagNameNS(namespaceuri, localname |