Iteratively parse a large XML file without using the DOM approach(在不使用 DOM 方法的情况下迭代解析大型 XML 文件)
问题描述
我有一个 xml 文件
I have an xml file
<temp>
<email id="1" Body="abc"/>
<email id="2" Body="fre"/>
.
.
<email id="998349883487454359203" Body="hi"/>
</temp>
我想读取每个电子邮件标签的 xml 文件.也就是说,有一次我想读取电子邮件 id=1..从中提取正文,读取的电子邮件 id=2...并从中提取正文...等等
I want to read the xml file for each email tag. That is, at a time I want to read email id=1..extract body from it, the read email id=2...and extract body from it...and so on
我尝试使用 DOM 模型进行 XML 解析,因为我的文件大小为 100 GB..该方法不起作用.然后我尝试使用:
I tried to do this using DOM model for XML parsing, since my file size is 100 GB..the approach does not work. I then tried using:
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')
现在,一旦我获得了 root..我不明白为什么我的代码无法解析.
Now once I get the root..I am not getting why is my code not been able to parse.
使用 iterparse 时的代码抛出以下错误:
The code upon using iterparse is throwing the following error:
"UnicodeEncodeError: 'ascii' codec can't encode character u'u20ac' in position 437: ordinal not in range(128)"
谁能帮忙
推荐答案
一个iterparse的例子:
An example for 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()
只需将 fakefile 替换为您的真实文件即可.另请阅读 this 了解更多详情.
Just replace fakefile with your real file. Also read this for further details.
这篇关于在不使用 DOM 方法的情况下迭代解析大型 XML 文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在不使用 DOM 方法的情况下迭代解析大型 XML 文件


基础教程推荐
- 修改列表中的数据帧不起作用 2022-01-01
- 在Python中从Azure BLOB存储中读取文件 2022-01-01
- 包装空间模型 2022-01-01
- 使用大型矩阵时禁止 Pycharm 输出中的自动换行符 2022-01-01
- Plotly:如何设置绘图图形的样式,使其不显示缺失日期的间隙? 2022-01-01
- 求两个直方图的卷积 2022-01-01
- 在同一图形上绘制Bokeh的烛台和音量条 2022-01-01
- PANDA VALUE_COUNTS包含GROUP BY之前的所有值 2022-01-01
- PermissionError: pip 从 8.1.1 升级到 8.1.2 2022-01-01
- 无法导入 Pytorch [WinError 126] 找不到指定的模块 2022-01-01