lxml内存问题

时间:2010-10-23 15:22:01

标签: python xml lxml

我正在尝试解析大型XML文件(> 3GB),如下所示:

context = lxml.etree.iterparse(path)
for action,el in self.context:
    # do sth. with el

使用iterparse我认为数据没有完全加载到RAM中,但根据这篇文章我错了: http://www.ibm.com/developerworks/xml/library/x-hiperfparse/(参见清单4) 虽然当我将此解决方案应用于我的代码时,显然已清除了一些尚未解析的元素(尤其是el的子元素)。

这个内存问题还有其他解决办法吗?

提前致谢!

2 个答案:

答案 0 :(得分:2)

不要忘记使用clear(),也可以选择清除根元素,如here所述。但据我所知,你已经这样做了,但显然你正在尝试访问已经清除过的内容,或者尚未解析的内容。如果你能提供的东西比“做某事”更有用,那将会很有帮助。您使用的是getnext()还是getprevious()? Xpath表达式?

另一个选择,如果你真的不想构建一个树,就是使用target parser interface,就像SAX for lxml / etree(但更容易)。

答案 1 :(得分:1)

我通过直接使用上下文选择标记解决了这个问题:

lxml.etree.iterparse(path, tag=tag)

而不是额外的if子句。

非常感谢您的支持!