Python 2.7 为什么python元素树占用了这么多内存?
我将从一个巨大的(4GB)xml文件中找到一些特定的信息。为了避免使用太多内存,我使用了Python中元素树库的iterparse方法。这似乎工作得很好,Python的内存使用量大部分约为3.5MB。但是当它到达程序的末尾时,内存使用量正在增加到几GB,而且似乎永远不会结束 从输出的csv文件来看,程序似乎已经完成了所有感兴趣的元素,但在完成程序时存在一些问题。有谁能看到我的程序有什么问题,并告诉我为什么它会这样做 程序如下所示:Python 2.7 为什么python元素树占用了这么多内存?,python-2.7,elementtree,export-to-csv,Python 2.7,Elementtree,Export To Csv,我将从一个巨大的(4GB)xml文件中找到一些特定的信息。为了避免使用太多内存,我使用了Python中元素树库的iterparse方法。这似乎工作得很好,Python的内存使用量大部分约为3.5MB。但是当它到达程序的末尾时,内存使用量正在增加到几GB,而且似乎永远不会结束 从输出的csv文件来看,程序似乎已经完成了所有感兴趣的元素,但在完成程序时存在一些问题。有谁能看到我的程序有什么问题,并告诉我为什么它会这样做 程序如下所示: import xml.etree.ElementTree as
import xml.etree.ElementTree as ET
output_file = 'output.csv'
input_file = 'raw_data/denmark-latest.xml'
parser = ET.iterparse(input_file, events=("start", "end"))
parser = iter(parser)
event, root = parser.next()
with open(output_file, 'a', 1) as f:
for event, element in parser:
if event == "start" and element.tag == "node":
for node in element.findall(".//tag/[@k='addr:housenumber']/..[@lat]"):
f = open(output_file, "a")
lat = node.get('lat')
lon = node.get('lon')
for tag in node.findall("./tag/[@k='addr:city']"):
city = tag.get('v')
for tag in node.findall("./tag/[@k='addr:postcode']"):
postcode = tag.get('v')
for tag in node.findall("./tag/[@k='addr:street']"):
street = tag.get('v')
for tag in node.findall("./tag/[@k='addr:housenumber']"):
houseno = tag.get('v')
string = str(lat) + ', ' + str(lon) + ', ' + str(postcode) + ', ' + str(city) + ', ' + str(street) + ', ' + str(houseno) +'\n'
f.write(string)
root.clear()
在
节点
上方或同一级别上是否存在某种元素?这可能会导致根
增长,直到看到下一个节点
。@larsmans,据我所知,节点
元素始终处于第二级。