Python lxml内存问题

Python lxml内存问题,python,xml,lxml,Python,Xml,Lxml,我正试图像这样解析大型XML文件(>3GB): context = lxml.etree.iterparse(path) for action,el in self.context: # do sth. with el 使用iterparse,我认为数据没有完全加载到RAM中,但根据本文,我错了: (参见清单4) 虽然当我将此解决方案应用于代码时,一些元素显然被清除,但到目前为止还没有被解析(尤其是el的子元素) 这个内存问题还有其他解决方案吗 提前谢谢 不要忘记使用clear(),也

我正试图像这样解析大型XML文件(>3GB):

context = lxml.etree.iterparse(path)
for action,el in self.context:
    # do sth. with el
使用iterparse,我认为数据没有完全加载到RAM中,但根据本文,我错了: (参见清单4) 虽然当我将此解决方案应用于代码时,一些元素显然被清除,但到目前为止还没有被解析(尤其是
el
的子元素)

这个内存问题还有其他解决方案吗


提前谢谢

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


如果您真的不想构建树,另一个选项是使用,它类似于用于lxml/etree的SAX(但更简单)。

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

lxml.etree.iterparse(path, tag=tag)
而不是附加if子句


非常感谢您的支持

您是否像本文中那样清除元素及其后代?另外,我认为您应该将事件设置为标记事件的末尾(“end”)。是的,完全相同的方法-我尝试了“end”事件,但仍然存在相同的问题。