我有一个非常大的xml文件,我需要根据特定的标签将其拆分为几个。XML文件如下所示:
<xml>
<file id="13">
<head>
<talkid>2458</talkid>
<transcription>
<seekvideo id="645">So in college,</seekvideo>
...
</transcription>
</head>
<content> *** This is the content I am trying to save *** </content>
</file>
<file>
...
</file>
</xml>
我想提取每个文件的内容并根据talkid保存。
下面是我尝试过的代码:
import xml.etree.ElementTree as ET
all_talks = 'path\\to\\big\\file'
context = ET.iterparse(all_talks, events=('end', ))
for event, elem in context:
if elem.tag == 'file':
content = elem.find('content').text
title = elem.find('talkid').text
filename = format(title + ".txt")
with open(filename, 'wb', encoding='utf-8') as f:
f.write(ET.tostring(content), encoding='utf-8')
但我得到了以下错误:
AttributeError: 'NoneType' object has no attribute 'text'
3条答案
按热度按时间dgenwo3n1#
如果您已经在使用
.iterparse()
,那么只依赖于事件会更通用:**更新。**在similar question@Leila中,询问如何将所有
<seekvideo>
标记中的文本写入文件,而不是将<content>
中的文本写入文件,因此,以下是一个解决方案:dbf7pr2w2#
试着这样做..
问题在于talkid是head标签而不是file标签的子标签。
cbjzeqam3#
您可以使用Beautiful Soup来解析xml。
它应该是这样的(我在XML中添加了第二个talk id,以演示如何查找多个标记)
注意:你需要为bs4安装一个解析器来处理xml
pip install lxml
。