Python ElementTree:部分解析大文件

时间:2013-05-28 12:55:02

标签: python performance parsing partial elementtree

我有一个大型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()会加载整个文件。

如何加载文件直到&lt; / interesting_part&gt; ?

我想到了类似的东西:

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

提前感谢你, 埃里克。

1 个答案:

答案 0 :(得分:4)

请改用iterparse() function,只需在符合要求时停止迭代:

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.