从ET.parse迁移到etree.iterparse

时间:2016-02-11 12:13:10

标签: python python-2.7 xml-parsing elementtree

编写代码来解析.osm文件。 花费大量时间构建最多50行代码,但遇到了“内存错误”问题。问题。 似乎最好的解决方案是使用interparse()而不是parse()。

我的问题是:我应该如何更改代码 (我的代码的陈述)

import xml.etree.ElementTree as ET
tree = ET.parse('file.osm')
root = tree.getroot()

to(使用interparse()方法) (不是我的代码)

import xml.etree.ElementTree as etree
context=etree.iterparse('file.osm', events=('start', 'end', 'start-ns', 'end-ns'))

并且不会破坏我的其余代码 (只是我的部分代码)

list=[]
for i in root.findall('node'):  
    lat=i.get('lat')
    lon=i.get('lon')
    dict = {}
    for ii in i:        
        dict['lat']=lat
        dict['lon']=lon     
        key=ii.get('k')
        val=ii.get('v')     
        dict[key]=val       
    if len(dict)>0:
        list.append(dict)

1 个答案:

答案 0 :(得分:0)

tree = ET.iterparse('file.osm')
root = tree.root

这将为您提供树根。从那里它与解析

相同