Python修改XML文件内容并保存
- 前言
- 前提条件
- 相关介绍
- 实验环境
- Python修改XML文件内容并保存
- writerxml方法介绍
- 代码实现
- 输出结果
前言
- 本文是个人使用Python XML模块操作XML文件的电子笔记,由于水平有限,难免出现错漏,敬请批评改正。
- 更多精彩内容,可点击进入我的个人主页查看
前提条件
- 熟悉Python
相关介绍
- Python是一种跨平台的计算机程序设计语言。是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。
- Python OS模块是负责程序与操作系统的交互,提供了访问操作系统底层的接口和非常丰富的方法用来处理文件和目录。
- XML 指可扩展标记语言(eXtensible Markup Language),XML 被设计用来传输和存储数据。XML 是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识,它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。
- 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展置标语言的标准编程接口。一个 DOM 的解析器在解析一个 XML 文档时,一次性读取整个文档,把文档中所有元素保存在内存中的一个树结构里,之后你可以利用DOM 提供的不同的函数来读取或修改文档的内容和结构,也可以把修改过的内容写入xml文件。
实验环境
- Python 3.x (面向对象的高级语言)
Python修改XML文件内容并保存
以修改XML文件中的每个object的bndbox中的xmin、ymin、xmax、ymax为例。
writerxml方法介绍
writexml(writer, indent, addindent, newl, encoding)
- writer是文件对象
- indent是每个tag前填充的字符
- addindent是每个子结点的缩近字符
- newl是每个tag后填充的字符
- encoding是生成的XML信息头中的encoding属性值,在输出时minidom并不真正进行编码的处理,如果你保存的文本内容中有汉字,则需要自已进行编码转换。这也是为什么下面代码中open()方法里还要设置encoding='utf-8’的原因。(个人理解,如有误,敬请指正)
代码实现
import os
import xml.dom.minidom
path = 'head.xml' #文件路径
dom = xml.dom.minidom.parse(path) # 使用minidom解析器打开 XML 文档,创建一个dom对象
root = dom.documentElement # 获取到根节点
# 读取标注目标框
objects = root.getElementsByTagName("bndbox")
for obj in objects:
xmin = obj.getElementsByTagName("xmin") # 获取到xmin元素
xmin_data = int(float(xmin[0].firstChild.data)) # 获取到xmin值
ymin = obj.getElementsByTagName("ymin") # 获取到ymin元素
ymin_data = int(float(ymin[0].firstChild.data)) # 获取到ymin值
xmax = obj.getElementsByTagName("xmax") # 获取到xmax元素
xmax_data = int(float(xmax[0].firstChild.data)) # 获取到xmax值
ymax = obj.getElementsByTagName("ymax") # 获取到ymax元素
ymax_data = int(float(ymax[0].firstChild.data)) # 获取到ymax值
# 修改XML,将xmin、ymin、xmax、ymax缩小0.5倍
xmin[0].firstChild.data = int(xmin_data * 0.5)
ymin[0].firstChild.data = int(ymin_data * 0.5)
xmax[0].firstChild.data = int(xmax_data * 0.5)
ymax[0].firstChild.data = int(ymax_data * 0.5)
# 保存更新后的文件
with open(path, 'w',encoding='utf-8') as f:
dom.writexml(f, addindent=' ', encoding='utf-8')
输出结果
更多精彩内容,可点击进入Python日常小操作专栏或我的个人主页查看