web-dev-qa-db-fra.com

Quelles sont les différences entre lxml et ElementTree?

Quand il s'agit de générer des données XML en Python , il y a deux bibliothèques que je vois souvent recommandées: lxml et ElementTree

D'après ce que je peux dire, les deux bibliothèques sont très similaires l'une à l'autre. Ils semblent tous deux avoir des noms de module, des directives d'utilisation et des fonctionnalités similaires. Même les déclarations d'importation sont assez similaires.

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

Quelles sont les différences entre les bibliothèques lxml et ElementTree pour Python?

27

ElementTree est livré avec la bibliothèque standard Python qui inclut d'autres types de modules de données tels que json et csv. Cela signifie le module est livré avec chaque installation de Python. Pour la plupart des opérations XML normales, y compris la création d'arborescences de documents et la recherche et l'analyse simples des attributs d'élément et des valeurs de nœud, même les espaces de noms, ElementTree est un gestionnaire fiable.

Lxml est un module tiers qui nécessite une installation. À bien des égards, lxml en fait s'étend ElementTree car la plupart des opérations du module intégré sont disponibles. Le principal de cette extension est que lxml prend en charge XPath 1.0 et XSLT 1.0. De plus, lxml peut analyser des documents HTML qui ne sont pas conformes à XML et est donc utilisé pour les opérations de Web-scraping et même comme analyseur dans BeautifulSoup et moteur dans Pandas, pandas.read_html() . Les autres fonctionnalités utiles et courantes de lxml incluent pretty_print output, objectify , and sax support. Bien sûr, en tant que module tiers, les versions avec des fonctionnalités supplémentaires sont facilement accessibles par rapport à la bibliothèque standard.

21
Parfait

Je ne dirais pas que lxml est plus rapide que ET dans l'ensemble, car les deux modules offrent des tonnes de fonctionnalités. Pour fournir un peu de contexte, ElementTree prend également en charge XPath, mais en particulier ET a une fonction unique et utile appelée iterparse() qui refait le document XML comme un itérable. Cela se traduit par une analyse beaucoup plus rapide, en particulier pour les fichiers XML volumineux.

L'API ET elle-même crée des types d'éléments qui sont un croisement hybride entre une liste et un dictionnaire. Cela peut signifier des maux de tête pour les nouveaux utilisateurs du module, mais asseyez-vous et vous verrez qu'il est assez flexible.

3
Jason Argo