当我在几千条记录的测试数据集上使用它时,以下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
免费下载答案 0 :(得分:0)
哪部分失败了? file.read()或ET.fromstring?
简单的解决方案(除了购买更多内存)将保存检索到的文件并使用ET.parse(filename)来避免将XML作为字符串读取到内存中。
其他情况是使用xml.sax API,它不会同时解析XML。