在ElementTree吃内存的iterparse

时间:2016-11-09 18:56:06

标签: python xml elementtree iterparse

我编写了以下代码,用于从Open Street Map读取多伦多的XML / OSM数据,并获取所有邮政编码的列表。

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import iterparse

file = 'sample_map.osm'

for event, elem in iterparse(file): 
    nodes = elem.findall('node')
    for oneN in nodes:
        try:        
            tags = oneN.findall('tag')
            for oneTag in tags:
                if oneTag.attrib['k'] == 'addr:postcode':
                    print (oneTag.attrib['v'])
        except Exception as e:
            pass
        oneN.clear()

虽然代码输出的结果来自一个9 MB的文件,该文件在1秒钟内有样本数据,但当我在包含整个多伦多(1.15 GB)数据的文件中朗读它时,它会占用整个PC内存并永远消耗掉

我假设使用iterparse和oneN.clear()应该在运行主循环时释放我的内存。有人可以指导我,我做错了什么? TIA

0 个答案:

没有答案