【问题标题】:python cElementTree uses too much memorypython cElementTree 使用太多内存
【发布时间】:2012-11-06 21:33:15
【问题描述】:

我有以下代码段

import xml.etree.cElementTree as et

fstring = open(filename).read()
tree = et.fromstring(fstring)

for el in tree.findall('tag'):
    do stuff

但是,fstring 是巨大的(大约 80mbs 的数据),当我尝试将字符串转换为树时遇到“内存不足”错误。有没有办法解决这个问题,也许是对树的某种惰性评估?

谢谢!

编辑:

我尝试使用 iterparse,但它仍然在 iterparse 调用上给我 MemoryError。有没有办法将文件分成多个块并逐个处理?

【问题讨论】:

标签: python xml elementtree


【解决方案1】:

看看iterparse

例如解析大文件,可以尽快去掉元素 当您处理它们时:

for event, elem in iterparse(source):
    if elem.tag == "record":
        ... process record elements ...
        elem.clear()

【讨论】:

  • 我在 iterparse(source) 行上收到“MemoryError”:\
  • 您是在清除访问过的元素,还是在迭代时让它们累积?
  • 我在 for 循环结束时调用 elem.clear() 。另外,我使用的是 xml.etree.cElementTree 的 iterparse,而不是 lxml。我不确定这是否会有所不同。
  • 问题是对 iterparse 的调用给了我内存错误。实际的 for 循环尚未执行。
  • 我把它改成了 lxml.etree.iterparse,我在同一行得到了 MemoryError。堆栈跟踪指向 iterparse.__init__ 和 lxml.etree._encodeFilename 函数。
猜你喜欢
  • 2013-07-11
  • 2020-05-18
  • 1970-01-01
  • 1970-01-01
  • 2015-06-18
  • 2010-12-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多