在Python中使用minidom的MemoryError

时间:2012-06-20 20:18:48

标签: python minidom

我在Python中有一个带有minidom解析器的MemoryError。 我正在阅读8000个小文件(大多数低于50 Kb)并且在2500读完后我得到了这个错误...`

Traceback (most recent call last): 

 File "C:\eclipse\plugins\org.python.pydev.debug_2.4.0.2012020116\pysrc\pydevd.py", line 1307, in <module>
    debugger.run(setup['file'], None, None)
  File "C:\eclipse\plugins\org.python.pydev.debug_2.4.0.2012020116\pysrc\pydevd.py", line 1060, in run
    pydev_imports.execfile(file, globals, locals) #execute the script
  File "C:\Users\calculator_2012.py", line 81, in <module>
    file_content, economicFlow, elementaryFlow = XML_reader(spoldFile)
  File "C:\Users\XML_reader.py", line 10, in XML_reader
    xmltree = parse(spold_filename)
  File "C:\Python27\lib\xml\dom\minidom.py", line 1914, in parse
    return expatbuilder.parse(file)
  File "C:\Python27\lib\xml\dom\expatbuilder.py", line 924, in parse
    result = builder.parseFile(fp)
  File "C:\Python27\lib\xml\dom\expatbuilder.py", line 207, in parseFile
    parser.Parse(buffer, 0)
  File "C:\Python27\lib\xml\dom\expatbuilder.py", line 294, in character_data_handler_cdata
    _append_child(self.curNode, node)
  File "C:\Python27\lib\xml\dom\minidom.py", line 274, in _append_child
    def _append_child(self, node):
  File "C:\eclipse\plugins\org.python.pydev.debug_2.4.0.2012020116\pysrc\pydevd.py", line 942, in trace_dispatch
    traceback.print_exc()
  File "C:\Python27\lib\traceback.py", line 232, in print_exc
    print_exception(etype, value, tb, limit, file)
MemoryError

是否有人可以建议“无内存泄漏”解析器?

4 个答案:

答案 0 :(得分:3)

我还建议使用内置cElementTree。 Minidom有很多问题:/

否则lxml也相当不错并且功能更多。

答案 1 :(得分:2)

我似乎minidom可以占用大量内存。

我试图解析一个56MB的文件,需要8G内存来读取它。

你做数学..

答案 2 :(得分:1)

libxml2更快,没有内存泄漏,但它太喜欢没有任何好处,并且有可怕的文档

lxml是一个超过libxm2和etree模块的层,因此这是具有libxml2性能的python方式

http://lxml.de/

编辑:拼写错误

答案 3 :(得分:0)

那么,回溯建议你在PyDev调试器中运行,所以,你是否尝试在没有调试器的情况下在Eclipse中运行它?