【发布时间】:2013-06-19 13:47:39
【问题描述】:
我的 XML 文件如下所示:
<root>
<group from="1", to="100">
<link target="1"/>
...
<link target="100"/>
</group>
...
</root>
我有 6000 个 <group> 元素和 5M <link> 元素。我想要一个以元组 (from, to) 作为键的字典和一个 <link>s 的 target 属性列表,但我收到以下代码的内存错误:
from lxml import etree
from gzip import open as gopen
def extractTargets(fin):
targets = dict()
with gopen(fin) as xml:
context = etree.iterparse(xml, tag="group")
for event, elem in context:
targets[(elem.get("from"), elem.get("to"))] = elem.xpath("link/@target")
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
【问题讨论】:
-
也许您也需要从
xpath()结果集中提取target属性值?您仍然通过父指针 IIRC 持有对树的引用,因此您希望尽快摆脱 any ElementTree 对象。 -
我认为使用 SAX 是一种选择,因为我不需要内存中的整个树。
标签: python xml xml-parsing lxml