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