读取xml由于大小而失败 - 可以在python中逐行读取吗?

时间:2016-03-22 12:25:08

标签: python xml elementtree

当我在几千条记录的测试数据集上使用它时,以下python代码工作正常但是当我尝试使用大约400MB的xml时,它会耗尽内存。有没有办法让它逐行阅读?

import urllib
import xml.etree.ElementTree as ET

url = raw_input('Enter - ')

value,count,total, counts =0,0,0, dict()

print "Retrieving: ", url
file=urllib.urlopen(url)
data=file.read()
print 'Retrieved',len(data),'characters'
xml=ET.fromstring(data)
tags=xml.findall('.//Postcode')
for tag in tags:
#    print tag.text
    count+=int(tag.text)
print 'Count: ', len(tags)
print 'Sum: ', count

这将写入sqlite3,但在测试时出现内存错误(在进入上面的示例代码中未包含的DB编写过程之前)。

我尝试阅读的数据可以从http://data.gov.au/dataset/abn-bulk-extract

免费下载

1 个答案:

答案 0 :(得分:0)

哪部分失败了? file.read()或ET.fromstring?

简单的解决方案(除了购买更多内存)将保存检索到的文件并使用ET.parse(filename)来避免将XML作为字符串读取到内存中。

其他情况是使用xml.sax API,它不会同时解析XML。