我编写了以下代码来从 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()
虽然代码在 1 秒内从包含样本数据的 9 MB 文件中输出结果,但当我在包含整个多伦多(1.15 GB)数据的文件上朗姆酒时,它会占用整个 PC 内存并永远占用。
我假设使用 iterparse 和 oneN.clear() 应该在运行主循环时释放我的内存。有人可以指导我我做错了什么吗?TIA