python-lxml etree.parse MemoryAllocation错误

我正在使用lxml etree.parse解析一个巨大的XML文件(大约65MB-300MB).
   当我运行包含以下功能的独立python脚本时,出现内存分配失败:

Error:

     Memory allocation failed : xmlSAX2Characters, line 5350155, column 16

部分功能代码:

def getID():
        try:
            from lxml import etree
            xml = etree.parse(<xml_file>)  # here is where the failure occurs
            for element in xml.iter():
                   ...
                   result = <formed by concatenating element texts>
            return result
        except Exception, ex:
            <handle exception>

奇怪的是,当我在IDLE上输入相同的函数并测试了相同的XML文件时,我没有遇到任何MemoryAllocation错误.

关于这个问题有什么想法吗?提前致谢.

解决方法:

我将改用iterative parser解析文档,对完成的任何元素调用.clear();这样,您就不必一次将整个文档加载到内存中.

您可以将迭代解析器限制为仅对您感兴趣的标记.如果您只想解析< person>标签,这样告诉您的解析器:

for _, element in etree.iterparse(input, tag='person'):
    # process your person data
    element.clear()

通过清除循环中的元素,可以将其从内存中释放出来.

上一篇:如何使用Python和lxml选择“加载更多结果”按钮


下一篇:python lxml查找标签