我有一个xml文件
<temp>
<email id="1" Body="abc"/>
<email id="2" Body="fre"/>
.
.
<email id="998349883487454359203" Body="hi"/>
</temp>
我想阅读每个电子邮件标记的xml文件。也就是说,在我想要从中读取电子邮件id = 1..extract body时,读取的电子邮件ID = 2 ...并从中提取正文...等等
我尝试使用DOM模型进行XML解析,因为我的文件大小是100 GB ..这种方法不起作用。然后我尝试使用:
from xml.etree import ElementTree as ET
tree=ET.parse('myfile.xml')
root=ET.parse('myfile.xml').getroot()
for i in root.findall('email/'):
print i.get('Body')
现在,一旦我得到了根...我不知道为什么我的代码无法解析。
使用iterparse时的代码抛出以下错误:
"UnicodeEncodeError: 'ascii' codec can't encode character u'\u20ac' in position 437: ordinal not in range(128)"
有人可以提供帮助
答案 0 :(得分:8)
iterparse的一个例子:
import cStringIO
from xml.etree.ElementTree import iterparse
fakefile = cStringIO.StringIO("""<temp>
<email id="1" Body="abc"/>
<email id="2" Body="fre"/>
<email id="998349883487454359203" Body="hi"/>
</temp>
""")
for _, elem in iterparse(fakefile):
if elem.tag == 'email':
print elem.attrib['id'], elem.attrib['Body']
elem.clear()
只需将伪文件替换为您的真实文件即可。 另请阅读this了解更多详情。