首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ElementTree迭代解析需要多长时间?

ElementTree迭代解析需要多长时间?
EN

Stack Overflow用户
提问于 2012-06-28 18:41:27
回答 1查看 1.2K关注 0票数 3

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

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

我正在尝试解析一个~90 MB的XML文件,我有以下代码:

代码语言:javascript
复制
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秒..。甚至与本教程中报告的大小不同,我使用的是大小相同的文件、类似的算法和相同的包。

请有人告诉我,我的代码可能出了什么问题,或者我可能没有注意到我的情况和教程之间有什么不同?

我正在使用Python2.7.3。

增编:

我也在使用一台相当强大的机器,以防有人认为可能是它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-28 19:38:31

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

具有79M文件的

代码语言:javascript
复制
$ 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输出为:

代码语言:javascript
复制
1 loops, best of 3: 22.3 sec per loop

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

对于第一个文件:730 msec per loop

对于第二个文件:11.4 sec per loop

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11250934

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档