pythonでxmlファイルを解析する

1196 ワード

pythonで解析するxmlファイルは、一般的に3つのライブラリ:xmlを使用できます.dom.minidom(pythonは2.0版から持参)、cElementTree(ElementTreeライブラリに依存)、lxml(2つのCライブラリの上に構築されています:libxml2libxslt)。2 Kのxmlファイルで効率をテストすると、解析時間に差はありませんが、メモリの使用量はそれぞれ3.5 M、2.9 M、4.7 Mです.968 Kのxmlファイルを使用する場合、解析用はそれぞれ0.44 s、0.03 s、0.02 s、占有メモリはそれぞれ69.0 M、9.8 M、12.1 Mである.23 Mのxmlファイルを使用すると、3つの間の効率の差がより顕著になり、xmlを使用する.dom.minidom.parse(filename)後、パソコンが直接動かなくなり、やっと端末の下に切り替えたtopを見ると、cpuの使用率はほぼ100%に達し、メモリの占有量は直線的に上昇し、1.2 Gに達し、しかも上昇しており、killだけが落ちている.ET.parse(filename)は0.91 sで、メモリ171.2 Mを占有する.lxml.etree.parse(filename)は0.37 sで、メモリ193.7 Mを消費します.
したがって、コンテンツの少ないxmlファイルを解析する場合、例えばグラフィックインタフェースのxmlファイルはpythonが持参するxmlを用いる.dom.minidomでいいです.もちろんcElementTreeはメモリの消費量が最も少ないですが、cElementTreeをインストールするほか、ElementTreeモジュールを追加インストールします.比較的大きなxmlファイルを解析する場合、xml.domはまったく対応できません.cElementTreeはlxmlよりもメモリを消費しませんが、lxmlの解析時間は最も短いです.
もちろん、大きなxmlファイルを解析する場合、たとえば1 Gサイズを超える場合は、ElementTreeとlxmlが提供するiterparseメソッドを使用して反復解析します.
 
最近また2種類のxmlファイルを解析するライブラリを発見しました:xml.parsers.expatとpyRXP.テストを経てxmlを用いる.parsers.expatは、超大xmlファイルを処理する際により効率的です.これは、主にシーケンス処理であり、処理済みのタグは保存されないため、非常に大きなXMLメモリ表現は作成されません.