编程语言
首页 > 编程语言> > python-ElementTree iterparse应该花多长时间?

python-ElementTree iterparse应该花多长时间?

作者:互联网

在回答另一个问题时,有人向我展示了以下教程,作者声称其中使用了iterparse在3秒内解析了约100 MB的XML文件:

http://eli.thegreenplace.net/2012/03/15/processing-xml-in-python-with-elementtree/

我正在尝试解析约90 MB的XML文件,并且我有以下代码:

from xml.etree.cElementTree import *
count = 0

for event, elem in iterparse('foo.xml'):        
    if elem.tag == 'identifier' and elem.text == 'bar':
        count += 1
    elem.clear() # discard the element

print count

这大约需要30秒钟的时间……甚至与我在使用大小相似,算法和封装相同的文件中阅读的教程所报告的数量级都不一样.

有人可以告诉我我的代码可能有什么问题,或者情况和教程之间可能没有引起我注意的区别吗?

我正在使用Python 2.7.3.

附录:

我还使用了功能相当强大的机器,以防万一有人认为是这样.

解决方法:

正如TJD所提到的,仅比较XML的大小可能不会提供很多信息.但是,我碰巧具有相同结构但大小不同的文件:

带有79M文件:

$python -m timeit -n 1 -c 'from xml.etree.cElementTree import iterparse
count = 0
for event, elem in iterparse("..../QT20060217_S_18mix23-2500_01.mzML"):
    if elem.tag.endswith("spectrum"): count += 1
    elem.clear()
print count'
6126
6126
6126
1 loops, best of 3: 950 msec per loop

对于3.8G文件,timeit输出为:

1 loops, best of 3: 22.3 sec per loop

另外,与lxml进行比较:将第一行中的xml.etree.cElementTree更改为lxml.etree,我得到:

对于第一个文件:每个循环730毫秒

对于第二个文件:每个循环11.4秒

标签:iterparse,xml,python,celementtree
来源: https://codeday.me/bug/20191101/1981461.html