В чем разница между lxml и ElementTree?

Когда дело доходит до генерации XML-данных в Python, я часто рекомендую использовать две библиотеки: lxml и ElementTree

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

 # Importing lxml and ElementTree
import lxml.etree
import xml.etree.ElementTree

Каковы различия между библиотеками lxml и ElementTree для Python?

Ответ 1

ElementTree поставляется со стандартной библиотекой Python, которая включает в себя другие типы модулей данных, такие как json и csv. Это означает, что модуль поставляется с каждой установкой Python. Для большинства обычных операций XML, включая построение деревьев документов и простой поиск и разбор атрибутов элементов и значений узлов, даже пространств имен, ElementTree является надежным обработчиком.

Lxml - это сторонний модуль, который требует установки. Во многих отношениях lxml фактически расширяет ElementTree поскольку доступно большинство операций во встроенном модуле. Главным среди этого расширения является то, что lxml поддерживает как XPath 1.0, так и XSLT 1.0. Кроме того, lxml может анализировать HTML-документы, которые не совместимы с XML и, следовательно, используются для операций очистки веб-страниц и даже в качестве анализатора в BeautifulSoup и движка в Pandas, pandas.read_html(). Другие полезные, общие функции lxml включают вывод pretty_print, objectify и sax. Конечно, как сторонний модуль, версии с дополнительными функциями легко доступны по сравнению со стандартной библиотекой.

Ответ 2

Я бы не сказал, что lxml быстрее, чем ET по всем направлениям, поскольку оба модуля предлагают множество функций. Чтобы обеспечить небольшой контекст, ElementTree также поддерживает XPath, но особенно ET имеет уникальную и полезную функцию, называемую iterparse() которая iterparse() XML-документ в качестве итерабельной. Это приводит к гораздо более быстрому анализу, особенно для больших файлов XML.

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