Python 2.7 为什么python元素树占用了这么多内存?

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

我将从一个巨大的(4GB)xml文件中找到一些特定的信息。为了避免使用太多内存,我使用了Python中元素树库的iterparse方法。这似乎工作得很好,Python的内存使用量大部分约为3.5MB。但是当它到达程序的末尾时,内存使用量正在增加到几GB,而且似乎永远不会结束

从输出的csv文件来看,程序似乎已经完成了所有感兴趣的元素,但在完成程序时存在一些问题。有谁能看到我的程序有什么问题,并告诉我为什么它会这样做

程序如下所示:

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,据我所知,
节点
元素始终处于第二级。