2

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

4 に答える 4

3

組み込みの cElementTree もお勧めします。Minidom には多くの問題があります :/

それ以外の場合は、lxml も非常に優れており、より多くの機能を備えています。

于 2012-06-25T11:57:32.817 に答える
2

minidom は多くのメモリを占有できるようです。

56MB のファイルを解析しようとしましたが、それを読み取るには 8G のメモリが必要です。

あなたは計算をします..

于 2013-08-23T03:28:33.013 に答える
1

libxml2 の方が高速で、メモリリークもありませんが、C が好きすぎて、ドキュメントがひどいです。

lxml は libxm2 と etree モジュールのレイヤーであるため、libxml2 のパフォーマンスを備えた Python の方法です。

http://lxml.de/

編集:タイプミス

于 2012-06-25T11:29:23.157 に答える
0

トレースバックは、PyDev デバッガーで実行していることを示唆しているので、デバッガーなしで Eclipse 内で実行してみましたか?

于 2012-06-25T11:17:31.600 に答える