構造化されたマークアップデータの大きなファイル(> 5GB)を解析しようとしています。データ形式は基本的にXMLですが、明示的なルート要素はありません。それを行う最も効率的な方法は何ですか?Pythonで大規模な疑似XMLファイルを解析する
SAXパーサーの問題は、ルート要素を必要とするため、データストリームに擬似要素を追加するか(PythonのJavaのSequenceInputStreamと同じですか?)、またはSAXに準拠しないイベントベースのパーサー(sgmllibの後継者はありますか)
データの構造は非常に単純です。要素の基本的なリスト:
<Document>
<docid>1</docid>
<text>foo</text>
</Document>
<Document>
<docid>2</docid>
<text>bar</text>
</Document>
*実際にあなたがxml.sax.parse
に 'ストリーム' オブジェクトを渡すことができ
'復帰 ''' StopIteration'に行うには、 '本当に正しいことですか?そのコードのクライアントが 'read()'だけを使用した場合、どのようにEOFに気付くでしょうか? –
Pythonのストリーム型オブジェクトのプロパティの1つは、read()呼び出しが少なくとも1バイトをブロックして返すか、EOFの場合に空の文字列を返すことです。これが元のfile.readメソッドの仕組みです。 – liori
これはPullDOMと組み合わせて使用することをお勧めします。これはSAXのストリーミング性とDOMの階層性を組み合わせたものです。 – RichieHindle