【发布时间】:2020-08-18 17:15:36
【问题描述】:
我有一个名为 Comments.xml 的 XML 文件,其大小为 15 GB。我想获得一个有 2 个键的字典,即 UserId 和 Text。请注意,文件中有许多UserId 和Text 的缺失值。我尝试了以下代码,但由于文件大小太大导致 RAM(13 GB RAM)崩溃。有没有一种高效的方法可以从xml文件中获取数据进行数据分析?
部分xml文件Comments.xml
<comments>
<row Id = '1' UserId = '143' Text = 'Hello World'>
<row Id = '2' UserId = '183' Text = 'Trigonometry is important.'>
<row Id = '3' UserId = '5645' Text = 'Mathematics is best.'>
<row Id = '4' UserId = '143' Text = 'Hello stack overflow'>
<row Id = '5' UserId = '143' Text = 'Hello'>
代码
import xml.etree.cElementTree as ET
tree = ET.iterparse('Comments.xml')
comments = {} #Dictionary to store the required data
for event, root in tree:
if (('Text' in root.attrib) and ('UserId' in root.attrib)): #To check for missing values
Text = root.attrib['Text']
UserId = root.attrib['UserId']
userid_comments.update({UserId:Text}) #Adding data to dictionary
root.clear()
预期输出
{'143':'Hello World','183':'Trigonometry is important.','5645':'Mathematics is best.','143':'Hello stack overflow','143':'Hello'}
OR
{'UserId':['143','183','5645','143','143'],'Text':['Hello World','Trigonometry is important.','Mathematics is best.','Hello stack overflow','Hello']}
【问题讨论】:
-
您的代码得到的输出是什么?它与预期输出有何不同?
-
而且您发布的 xml 无效
row标签未结束 -
你熟悉generators吗?
-
字典没有重复键。您的预期输出无效
-
@deadshot 我已经添加了预期的输出,您可以帮助我提供您认为对数据分析更有用的任何输出。此外,我刚刚显示了 xml 文件的前 5 行,所以我没有关闭根标记。原始 xml 文件有效,此代码适用于较小的 xml 文件。
标签: python python-3.x xml dictionary xml-parsing