1

私は大きなファイル (>9GB) を解析しており、Python で lxml の iterparse を使用してファイルを解析しながらクリアしながら進めています。疑問に思っていたのですが、クリア中に逆方向に解析する方法はありますか? これを lxml とは別に実装する方法はわかりましたが、このパッケージを使用すると便利です。

前もって感謝します!

4

2 に答える 2

1

はいといいえ...

「最後から」逆に開始するための「簡単な」解決策があります。しかし、最後まで行き、途中で「参照をクリア」して読み取りを最適化する逆イテレータがあります。

アプローチ 1: ファイルをその構造とノードで分割して、必要なものだけを解析できるようにします。

アプローチ 2: [1] で解析する「スマートな」方法を確認する

私の場合に私がしたこと。12 GB ファイルのデータが最後の 2 GB にある可能性があることは以前から知っていました。そこで、unix コマンドを使用してファイルを分割し、最後のファイルのみを処理します。

(これは醜いハックですが、私の場合はシンプルで十分に速く動作しました.tailも使用できますが、他のファイルもアーカイブしたいです)

--> 実際の Python マスターは file.seek() を使用しますが、UNIX コマンドの方が速いと思いました

今、私は 2 番目のアプローチを使用します [1]

[1] - http://www.ibm.com/developerworks/xml/library/x-hiperfparse/

xml の構造を理解するのに苦労しました。

于 2012-11-09T19:54:30.537 に答える
0

iterparse()厳密にフォワードのみです、私は恐れています。ツリーを逆方向に読み取りたい場合は、逆方向に解析しやすい形式で中間ストア(メモリ内またはディスク上)に書き込みながら、逆方向に読み取る必要があります。その後、ツリーを読み取ります。 。XMLをバックツーフロントで解析できるストリームパーサーを私は知りません。

私の頭のてっぺんから、2つのファイルを使用できます。1つはデータを含み、もう1つはデータファイル内のレコードへのオフセットのインデックスです。これにより、一度書き込まれると、逆方向の読み取りが比較的簡単になります。

于 2012-11-13T04:02:21.670 に答える