我编写了以下代码,用于从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