使用python反复查询xml

时间:2010-03-24 12:57:42

标签: python xml caching elementtree

我有一些运行查询所需的xml文档。我已经创建了一些python脚本(使用ElementTree)来执行此操作,因为我对使用它非常熟悉。

它的工作方式是我使用不同的参数多次运行脚本,具体取决于我想要找到的内容。

这些文件可能相对较大(10MB +),因此解析它们需要相当长的时间。在我的系统上,只需运行:

tree = ElementTree.parse(document)

需要大约30秒,随后的findall查询只会增加大约一秒钟。

看到我这样做的方式需要我反复解析文件,我想知道是否有某种缓存机制我可以使用,以便可以在后续查询中减少ElementTree.parse计算。

我意识到在这里做的聪明的事情可能是尝试在python脚本中一起批量尽可能多的查询,但我希望可能有另一种方式。

感谢。

3 个答案:

答案 0 :(得分:3)

虽然我建议使用lxml,但使用内置cElementTree可以大大提升性能。

from xml.etree import cElementTree as ElementTree

答案 1 :(得分:1)

首先,请考虑使用lxml的{​​{1}}实施:
http://lxml.de/ 这是libxml2的包装器,我发现它运行良好。

以交互方式运行python,针对同一个etree对象进行多次查询。 ElementTree是一个增强的交互式python解释器,可以轻松访问内省和方便语法。

E.g。使用ipython以ipython交互式检查note.xml

lxml.etree

答案 2 :(得分:1)

在调试lxml建议时,请查看此article,了解如何通过使用迭代(类似SAX)解析方法来提高性能。它起初可能很痛苦,因为它可以变得非常程序化和混乱,但它会使事情变得更快。从these benchmarks可以看出,lxml很可能是您表现最好的选择。