前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python读取xml格式的文件

python读取xml格式的文件

作者头像
生信修炼手册
发布2020-05-25 15:44:11
2.3K0
发布2020-05-25 15:44:11
举报
文章被收录于专栏:生信修炼手册

欢迎关注”生信修炼手册”!

xml是一种可扩展的标记语言, 是互联网中数据存储和传输的一种常用格式,遵循树状结构的方式,在各个节点中存储用户自定义的数据,一个xml文件示例如下

代码语言:javascript
复制
<?xml version="1.0"?>
<data>
    <country name="Liechtenstein">
        <rank>1</rank>
        <year>2008</year>
        <gdppc>141100</gdppc>
        <neighbor name="Austria" direction="E"/>
        <neighbor name="Switzerland" direction="W"/>
    </country>
    <country name="Singapore">
        <rank>4</rank>
        <year>2011</year>
        <gdppc>59900</gdppc>
        <neighbor name="Malaysia" direction="N"/>
    </country>
    <country name="Panama">
        <rank>68</rank>
        <year>2011</year>
        <gdppc>13600</gdppc>
        <neighbor name="Costa Rica" direction="W"/>
        <neighbor name="Colombia" direction="E"/>
    </country>
</data>

整个文档以固定的xml标记以及版本号开头,接下来以标签嵌套的形式构成,形成了一个树状结构,具有相同缩进的标签属于树状结构中的同一层级。

每个标签具备以下几个基本特征

  1. 标签名,比如上述列子中的data, country等就是标签名
  2. 属性,比如country标签中的name属性,以key=value的形式构成,一个标签可以有多个属性
  3. 内容,在标签之间的值,比如上述例子中第一个rank标签的内容为1

标签,属性,内容都可以根据用户的需求来自定义,所以xml文件非常的灵活。在python中,有多个模块都支持xml文件的处理,列表如下

  1. xml.etree.ElementTree
  2. xml.dom
  3. xml.dom.minidom
  4. xml.dom.pulldom
  5. xml.parsers.expat

其中,第一个模块更加轻便简介,对于简单的xml文档,推荐使用。基本用法如下

代码语言:javascript
复制
>>> import xml.etree.ElementTree
>>> from  xml.etree.ElementTree import parse
>>> xml = parse('input.xml')
# 获取根节点标签
>>> root = xml.getroot()
# 对于每个节点,都要tag和attrib两个属性
# tag对应标签名
>>> root.tag
'data'
# attrib对应标签的属性,是一个字典
>>> root.attrib
{}

对于root节点,可以通过遍历的形式来访问对应的子节点,用法如下

代码语言:javascript
复制
>>> for child in root:
...     print(child.tag, child.attrib)
...
country {'name': 'Liechtenstein'}
country {'name': 'Singapore'}
country {'name': 'Panama'}

实际应用中,更多的是访问特定标签中的内容,通过iter方法可以根据标签名访问特定标签,用法如下

代码语言:javascript
复制
>>> for neighbor in root.iter('neighbor'):
...     print(neighbor.get('name'))
...
Austria
Switzerland
Malaysia
Costa Rica
Colombia

get方法用于获取特定属性的值,findall方法则可以根据标签名或者xpath语法访问特定标签,用法如下

代码语言:javascript
复制
>>> for country in root.findall("country"):
...     year = country.find('year')
...     print(year.text)
...
2008
2011
2011

上述代码中,find方法用于查找当前标签下的子标签,text属性对应标签中的内容。通过上述几个方法,已经可以轻松获取特定标签的内容了。

除此之外,该模块还支持通过xpah语法来寻找特定的标签,具体的用法请查看官方的API说明。

·end·

—如果喜欢,快分享给你的朋友们吧—

原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!

本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-05-16,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 生信修炼手册 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据保险箱
数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档