繁体   English   中英

尝试在Python中解析大型xml文件-内存错误

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM