我正在尝试像这样解析大型 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/ (参见 list 4)
尽管当我将此解决方案应用于我的代码时,一些到目前为止尚未解析的元素显然被清除了(特别是 el
的子元素)。
还有其他解决办法来解决这个内存问题吗?
提前致谢!
最佳答案
不要忘记使用 clear()
,也可以选择清除根元素,如所述 here 。但据我了解,您已经在这样做,但显然您正在尝试访问已清除或尚未解析的内容。如果您能提供比“用 el 做某事”更多的东西,那将会很有帮助。您使用的是getnext()
还是getprevious()
? Xpath 表达式?
如果您确实不想构建树,另一个选择是使用 target parser interface ,这类似于 lxml/etree 的 SAX(但更简单)。
关于python - lxml内存问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4004672/