web-dev-qa-db-ja.com

lxmlとElementTreeの違いは何ですか?

PythonでXMLデータを生成する に関しては、次の2つのライブラリをお勧めします:lxmlおよびElementTree

私の知る限り、2つのライブラリは互いに非常に似ています。どちらも同様のモジュール名、使用ガイドライン、機能を持っているようです。インポート文でもかなり似ています。

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

PythonのlxmlライブラリとElementTreeライブラリの違いは何ですか?

27

ElementTree は、Python jsoncsvなどの他のデータモジュールタイプを含む標準ライブラリに組み込まれています。モジュールはPythonのインストールごとに出荷されます。ドキュメントツリーの構築、要素属性とノード値の簡単な検索と解析、名前空間を含むほとんどの通常のXML操作では、ElementTreeは信頼できるハンドラーです。

Lxml は、インストールが必要なサードパーティモジュールです。多くの点で、lxmlは実際にextendsElementTreeで、組み込みモジュールのほとんどの操作が利用できます。この拡張の主なものは、lxmlがXPath 1.0とXSLT 1.0の両方をサポートしていることです。さらに、lxmlは、XMLに準拠していないHTMLドキュメントを解析できるため、Webスクレイピング操作に使用されます。また、 BeautifulSoup のパーサー、およびPandasのエンジン pandas.read_html() 。 lxmlの他の便利で一般的な機能には、pretty_print出力、 objectify 、および sax サポート。もちろん、サードパーティのモジュールとしても、追加機能を備えたバージョンは、標準ライブラリと比較して簡単にアクセスできます。

21
Parfait

両方のモジュールが多数の機能を提供するため、lxmlが全面的にETよりも高速であるとは言いません。少しのコンテキストを提供するために、ElementTreeはXPathもサポートしますが、特にETには、XMLドキュメントを反復可能として再作成するiterparse()と呼ばれるユニークで便利な関数があります。これにより、特に大きなXMLファイルの場合、解析がはるかに高速になります。

ET API自体は、リストとディクショナリのハイブリッドクロスであるエレメントタイプを作成します。これは、このモジュールを初めて使用する人にとっては頭痛の種を意味する可能性がありますが、じっくり座ってみると、かなり柔軟であることがわかります。

3
Jason Argo