用Python解析大型XML文档的最快方法是什么?

用Python解析大型XML文档的最快方法是什么?,第1张

用Python解析大型XML文档的最快方法是什么?

我看起来好像您不需要程序中的任何DOM功能。我将第二次使用(c)ElementTree库。如果使用cElementTree模块的iterparse函数,则可以遍历xml并在事件发生时对其进行处理。

但是请注意,Fredriks关于使用cElementTree iterparse函数的建议:

要解析大型文件,您可以在处理完元素后立即删除它们:

for event, elem in iterparse(source):    if elem.tag == "record":        ... process record elements ...        elem.clear()

上述模式有一个缺点。它不会清除根元素,因此最终将得到一个带有大量空子元素的单个元素。如果您的文件很大,而不只是很大,这可能是一个问题。要变通解决此问题,您需要动手使用root元素。最简单的方法是启用启动事件,并将对第一个元素的引用保存在变量中:

# get an iterablecontext = iterparse(source, events=("start", "end"))# turn it into an iteratorcontext = iter(context)# get the root elementevent, root = context.next()for event, elem in context:    if event == "end" and elem.tag == "record":        ... process record elements ...        root.clear()

该lxml.iterparse()不允许这样。

前一个在Python 3.7上不起作用,请考虑以下方法来获取第一个元素。

import xml.etree.ElementTree as ET# get an iterablecontext = ET.iterparse(source, events=("start", "end"))is_first = Truefor event, elem in context:    # get the root element    if is_first:        root = elem        is_first = False    if event == "end" and elem.tag == "record":        ... process record elements ...        root.clear()


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5643454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存