lxml etree.parse MemoryAllocation错误

时间:2012-06-01 19:01:10

标签: python lxml

我正在使用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错误。

关于这个问题的任何想法?提前谢谢。

1 个答案:

答案 0 :(得分:3)

我会使用iterative parser解析文档,在您完成的任何元素上调用.clear();这样你就可以避免一次性将整个文档加载到内存中。

您可以将迭代解析器限制为仅您感兴趣的那些标记。如果您只想解析<person>标记,请告诉您的解析器:

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

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