2

大まかに(この順序で)構造化された大きな XML ファイルがあります。

<document>
   <interesting_part>
     ...
   </interesting_part>
   <foo>
     ...
     60000 lines
     ...
   </foo>
</document>

私のプログラムは:

from xml.etree import ElementTree as et
f=open(path_f)
tree=et.parse(f)
f.close()
# retreive infos from tree...

ファイルの最初の数ブロックだけに関心がありますが、et.parse() がファイル全体をロードするため、パフォーマンスが低下します。

</interesting_part> までのみファイルをロードする方法は?

私は次のようなことを考えました:

class My_Parser(et.XMLParser):
    ????
my_parser = My_Parser()
tree=et.parse(f, my_parser)

前もってありがとう、エリック。

4

1 に答える 1

6

iterparse()代わりに関数を使用し、必要なものが得られたら反復を停止します。

for event, element in et.iterparse(f):
    if element.tag == 'interesting_part':
        # `element` is the complete <interesting_part> element, with children
        # process it
        break  # ends parsing.
于 2013-05-28T12:59:52.950 に答える