我有一個相當大的XML文件,我需要獲取包含特定參數的所有節點(不同的公司信息)。 XML是約12 GB解壓縮。OverflowError:使用DOM解析大型XML時size不適合int int
<Companies xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" ...>
<Company id="782634892" source="abcd">
<attribution>abcde</attribution>
<name xml:lang="en">company name</name>
<Phones>
<Phone type="phone" hide="0">
<formatted>+1800111</formatted>
<country>1</country>
<prefix>800</prefix>
<number>111</number>
</Phone>
</Phones>
<Rubrics>
<rubric ref="184107947"/>
</Rubrics>
還有一堆東西,但沒關係。
我的代碼非常簡單:
file = open('companies2.xml')
data = file.read()
dom = parseString(data)
key = dom.getElementsByTagName("Company")
for elements in key:
rubricsArray = elements.getElementsByTagName("Rubrics")[0].getElementsByTagName("rubric")
for rub in rubricsArray:
if rub.attributes["ref"].value == '32432793389':
print elements.toxml()
它可以在我的測試做了一個更小的文件。但在這裏沒有。
Traceback (most recent call last):
File "./XMLparse.py", line 29, in <module>
dom = parseString(data)
File "/usr/lib/python2.7/xml/dom/minidom.py", line 1930, in parseString
return expatbuilder.parseString(string)
File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 940, in parseString
return builder.parseString(string)
File "/usr/lib/python2.7/xml/dom/expatbuilder.py", line 223, in parseString
parser.Parse(string, True)
OverflowError: size does not fit in an int
任何想法如何使它工作?我試圖用GZ文件,但命令zmore產生了一些隨機的第一行:
------> companies2.xml.gz <------
和DOM不會解析它。所以我把它壓縮了。 在此先感謝您的幫助。
隨着文件大小增加2GB以上,我們將看到越來越多的情況下,軟件無法應付,因爲它使用32位位偏移。我們的大多數編程環境都受限於語言級別,使用32位int作爲數組,字符串等的偏移。沒有簡單的答案。 –
@MichaelKay:我同意。不過,最近我有了一些相當令人驚喜的驚喜。許多舊工具不支持超過32位的索引,但同樣有很多工具已被更新。大多數情況下,您可以通過識別問題並找到更新的工具來進行管理。 – DrV