我不确定以前是否有人问过这个问题,但我一直找不到,请原谅我的无知。我想解析(流解析)大约 40 Gigs 的维基百科 xml 转储。我正在尝试使用 lxml iterparse aka 流解析器来为我完成这项工作,但由于某种原因,我编写的代码对我不起作用。在我解释我想要做什么之前,让我们考虑一下这种 xml 格式
<root>
<page>
<title> A </title>
<text> ..........blah blah...... </text>
</page>
<page>
<title> B </title>
<text> This is a line of sample text in title B </text>
</page>
<page>
<title> C </title>
<text> ............blah blah........ </text>
</page>
</root>
在上面的 xml 结构中,这与 wiki 转储非常相似,我想要做的是使用 python 流解析器(例如 lxml)读取“页面”标签(基本上将转储中的不同文章分开)内的每一件事(无需将整个 xml 树加载到内存中,这是不可能的)并在其上执行正则表达式。正是我想要做的是,如果在当前的“页面”元素中查找文本标签“类别:活着的人”,如果找到这样的匹配正则表达式,则将“文本”标签内的全部内容写成文本文件。但在正则表达式部分之前,我遇到了 lxml 解析器本身的问题。我在下面尝试的示例代码。提前致谢 :)
#LXML parser
from lxml import etree
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
print elem.xpath( 'description/text( )' )
context = etree.iterparse( MYFILE, tag='item' )
fast_iter(context,process_element)
随意完全更改代码并提供您自己的版本,只要我能解决我的问题,我真的不介意!
请有人帮忙!