从ET.parse迁移到etree.iterparse [英] migrate from ET.parse to etree.iterparse

查看:82
本文介绍了从ET.parse迁移到etree.iterparse的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

Wrote a code to parse .osm file. Spend a lot of time to build a up to 50 rows code but ran into a 'Memory Error' problem. Seems like the best solution is to use interparse() instead of parse().

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

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

至(使用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)

推荐答案

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

这将为您提供树根.从那里开始与解析相同

this will give you the tree root. from there it is the same as parse

这篇关于从ET.parse迁移到etree.iterparse的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆