pytorch技巧 三: 解析XML文件 及 ElementTree模块的使用

pytorch技巧 三: 解析XML文件 及 ElementTree模块的使用

1. 理解什么是xml

xml是可扩展标记语言(Extensible Markup Language)的缩写,其中的 标记(markup)是关键部分。您可以创建内容,然后使用限定标记标记它,从而使每个单词、短语或块成为可识别、可分类的信息。
下面为一个xml文件,后续对xml文件的操作都用这个例子来演示。
在这里插入图片描述
为了很好的理解xml文件的结构,画了树状图来表示,其中树状图的层数在xml文件中是空格来表示,即越深的节点空格数越多,对比就可以发现xml文件的特点。其中叶子节点表示该节点没有子节点。在这里插入图片描述

2. 利用ElementTree解析xml

第一步,将xml文件解析为树:

import xml.etree.ElementTree as ET

##下面是两种解析方法,看了源码,这两种方法效果其实是一样的,使用的时候看哪种方便就用哪种
tree1 = ET.ElementTree(file='./dlj.xml')
tree2 = ET.parse('./dlj.xml')
 

后面就可以对树进行各种操作:

  1. 获取根节点
import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')

root = tree.getroot()   #<Element 'annotation' at 0x000001EF52528868> 

显示根节点是个Element对象,名称为’annotation’

  1. 遍历子节点
import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')

root = tree.getroot()

for item in root.iter():
    print(item.tag)  #显示节点名称
    print(item.text) #显示节点内容
  1. 查找特定节点
import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')

root = tree.getroot()

for item in root.iter('xmin'): # 查找指定节点'xmin'
    print(item.text)   # 131

上面方法是遍历所有节点,找特定节点。
还有一种方法是遍历其直接子节点,找特定节点,如下所示:(如果其直接节点没有所找的特定节点会报错)

import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')

root = tree.getroot()

item1 = root.find('object') #在根节点下查找直接子节点'object'
print(item1.tag)
item2 = item1.find('difficult')  #在节点'object'下查找直接子节点'difficult'
print(item2.tag)
print(item2.text)

其实还可以通过索引来访问节点。

  1. 删除节点
import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')
root = tree.getroot()
del root[3]  # 删除根节点下索引为3的直接子节点,由结果可知节点'object'及其所有子节点都删除了。
for item in root.iter():
    print(item.tag)
    print(item.text)
  1. 更改节点名称或内容
import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')
root = tree.getroot()

root.find('folder').text = 'dlj' # 更改节点内容
root.find('folder').tag = 'wzh'  # 更改节点名称

for item in root.iter():
    print(item.tag)
    print(item.text)
  1. 保存xml文件
    注意!!!上面对xml文件的更改操作不会改变原本的xml文件,必须要保存下来。
import xml.etree.ElementTree as ET

tree = ET.parse('./dlj.xml')
root = tree.getroot()

root.find('folder').text = 'dlj'
root.find('folder').tag = 'wzh'

modify_tree = ET.ElementTree(root)
path_xml = 'new.xml'
modify_tree.write(path_xml)

在工程文件夹下就会生成一个new.xml的文件,如下所示,可以看出改动已经保存下来了。在这里插入图片描述

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值