为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Python中解析XML?

如何在Python中解析XML?

慕侠2389804 2019-05-28 16:03:48
如何在Python中解析XML?我在包含xml的数据库中有很多行,我正在尝试编写一个Python脚本,该脚本将遍历这些行并计算特定节点属性的实例数量。例如,我的树看起来像:<foo>    <bar>       <type foobar="1"/>       <type foobar="2"/>    </bar></foo>如何使用Python访问XML中的属性1和2?
查看完整描述

4 回答

?
慕勒3428872

TA贡献1848条经验 获得超6个赞

我建议ElementTree。同一API的其他兼容实现,例如lxml,以及cElementTreePython标准库本身; 但是,在这种情况下,他们主要添加的是更快的速度 - 编程部分的简易性取决于ElementTree定义的API 。

首先root从XML 构建一个Element实例,例如使用XML函数,或者使用以下内容解析文件:

import xml.etree.ElementTree as ET
root = ET.parse('thefile.xml').getroot()

或者显示的许多其他方式中的任何一种ElementTree。然后做一些事情:

for type_tag in root.findall('bar/type'):
    value = type_tag.get('foobar')
    print(value)

类似的,通常很简单的代码模式。


查看完整回答
反对 回复 2019-05-28
?
慕桂英3389331

TA贡献2036条经验 获得超8个赞

那里有很多选择。如果速度和内存使用是一个问题,cElementTree看起来很棒。与简单地使用文件读取相比,它的开销非常小readlines

相关指标可在下表中找到,从cElementTree网站复制:

library                         time    space

xml.dom.minidom (Python 2.1)    6.3 s   80000K

gnosis.objectify                2.0 s   22000k

xml.dom.minidom (Python 2.4)    1.4 s   53000k

ElementTree 1.2                 1.6 s   14500k  

ElementTree 1.2.4/1.3           1.1 s   14500k  

cDomlette (C extension)         0.540 s 20500k

PyRXPU (C extension)            0.175 s 10850k

libxml2 (C extension)           0.098 s 16000k

readlines (read as utf-8)       0.093 s 8850k

cElementTree (C extension)  --> 0.047 s 4900K <--

readlines (read as ascii)       0.032 s 5050k   

正如@jfs所指出的那样cElementTree它与Python捆绑在一起:

  • Python 2 : from xml.etree import cElementTree as ElementTree.

  • Python 3 :( from xml.etree import ElementTree自动使用加速C版本)。


查看完整回答
反对 回复 2019-05-28
  • 4 回答
  • 0 关注
  • 877 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信