栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

用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()


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/637635.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号