簡體   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