解析する必要のある非常に大きなXMLファイルを扱っていますが、メモリ使用量の問題については、このファイルの一部のみを読み取ることを考えていました。これを行う方法はありますか。ありがとうございます。
2 に答える
データの形式に応じて、ElementTree(ここ、ここ)またはlxml(ElementTree APIをサポートします;ここ、ここ)がおそらく必要なことを実行します。これは、イベント指向のパーサーとDOM指向のパーサーのハイブリッドであり、iterparse()メソッドを使用して高レベルのサブツリーを反復処理し、各サブツリーの内部を順番に問い合わせることができます。
この方法はSAXよりも低速です(私の使用では2〜4倍の時間がかかることに気づきました)が、結果として得られるコードは、理解、保守、および再利用が容易になります。ストレートアップのDOMパーサーと比較すると、反復中に訪問した要素を破棄するため、メモリの使用ははるかに管理しやすくなります。私の経験は、組み込みのxml.etree.ElementTreeライブラリのみです。APIをサポートする(または同様の機能を異なる方法で実行する)lxmlまたはその他のライブラリは、異なる特性を持ちます。
ElementTreeは、ドキュメントを簡単にチャンクに分割できる場合に繰り返し機能します。たとえば、ルート要素に基本的に簡単に繰り返すことができる製品のリストが含まれている、何千もの製品の説明を含むドキュメントです。一方、ドキュメントに構造化されていない/解析されていないデータが多数含まれているだけの場合でも、メモリ使用量を管理しやすくするための作業が必要になる場合があります。
お役に立てば幸いです。
とを使用lxml
して、etree
非常に大きなxml
ファイルを解析します。
そのプロセスについてのより良い説明がここにある記事、高性能XML
xml
これにより、非常に大規模な処理をメモリ効率の高い方法で迅速に行うための最良の方法が提供されます。