[英]Trying to parse large xml file in Python - Memory Errors
因此,我是一名初学者,没有全部编程经验。
我在Canopy环境中使用Python来抓取一些下载的XML文件,并使用xml.dom解析器来做到这一点。 我只是想从第一个us-bibliographic-patent-grant (这就是为什么我使用[0] )中刮擦标签,只是为了了解我要如何解析和存储整个数据集; 而不是一次完成所有操作。 xml的摘录如下:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE us-patent-grant SYSTEM "us-patent-grant-v42-2006-08-23.dtd" [ ]>
<us-patent-grant lang="EN" dtd-version="v4.2 2006-08-23" file="USD0606726-20091229.XML" status="PRODUCTION" id="us-patent-grant" country="US" date-produced="20091214" date-publ="20091229">
<us-bibliographic-data-grant>
<publication-reference>
<document-id>
<country>US</country>
<doc-number>D0606726</doc-number>
<kind>S1</kind>
<date>20091229</date>
</document-id>
</publication-reference>
<application-reference appl-type="design">
<document-id>
<country>US</country>
<doc-number>29299001</doc-number>
<date>20071217</date>
到目前为止,我的代码如下所示:
from xml.dom import minidom
filename = "C:/Users/SMOLENSK/Documents/Inventor Research/xml_2009/ipg091229.xml"
f = open(filename, 'r')
doc = f.read()
f.close()
xmldata = '<root>' + doc + '</root>'
data = minidom.parse(xmldata)
US_Biblio = xmldata.getElementsByTagName("us-bibliographic-data-grant")[0]
pat_num = US_Biblio.getElementsByTagName("doc-number")[0]
dates = pat_num.getElementsByTagName("date")
for date in dates:
print(date)
现在,在代码完全运行之后,我已经收到一些有关“内存错误”的消息,但是它只能运行一次,但是不幸的是,我无法记下到底发生了什么。 由于数据量很高(仅此文件就是460万行),该操作每次都会崩溃,并且我无法复制错误。
有什么人可以看错代码的吗? 我的代码正在解析整个数据集,然后再开始存储每个标签名称,但是是否有可能仅解析一定数量的方法? 也许只是用第一组制作一个新的xml文件。
如果您想知道我是否使用来绕过
ExpatError:第XXX行后出现垃圾
我是事先得到的。 我知道我的编码技巧并不出色,因此希望我不会犯一个简单而令人讨厌的编程错误。
尝试:
with open(filename, 'r') as f:
data = minidom.parse(f)
如果您确实需要标签,则可能需要弄乱一点,也许:
data = minidom.parse(itertools.chain('<root>', f, '</root>')
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.