我有一些运行查询所需的xml文档。我已经创建了一些python脚本(使用ElementTree)来执行此操作,因为我对使用它非常熟悉。
它的工作方式是我使用不同的参数多次运行脚本,具体取决于我想要找到的内容。
这些文件可能相对较大(10MB +),因此解析它们需要相当长的时间。在我的系统上,只需运行:
tree = ElementTree.parse(document)
需要大约30秒,随后的findall查询只会增加大约一秒钟。
看到我这样做的方式需要我反复解析文件,我想知道是否有某种缓存机制我可以使用,以便可以在后续查询中减少ElementTree.parse计算。
我意识到在这里做的聪明的事情可能是尝试在python脚本中一起批量尽可能多的查询,但我希望可能有另一种方式。
感谢。
答案 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很可能是您表现最好的选择。