使用背景:

使用对象:xml标签文件

我们在深度学习目标检测的相关实验当中常常会需要用到自制数据集,或者特定标签信息的数据集,有时候网上有开源的现成数据集,但可能其中表标定的标签信息不是我们需要的目标标签信息,这时我们需要对该标签信息进行快速替换,最后整理归纳为我们需要的数据集标签形式。

举例:口罩检测
目的:将xml文件中的name信息进行批量替换
原标签name:白色口罩、蓝色口罩、黑色口罩、无口罩
假如我们只想检测目标人物是否佩戴口罩,那么我们就需要将"白色口罩、蓝色口罩、黑色口罩"都替换为:“已佩戴口罩”。

原标签:

xml串替换节点包括子节点 java xml参数替换_python


批量替换:

xml串替换节点包括子节点 java xml参数替换_xml串替换节点包括子节点 java_02

批量替换代码:

import os.path
import xml.dom.minidom

# 将"白色口罩、蓝色口罩、黑色口罩"都替换为:"已佩戴口罩"
# path为需要替换标签的目标文件夹
path = 'D:pythonproject\change_label\Annotation_1'
files = os.listdir(path)  # 得到文件夹下所有文件名称
s = []
print('------------开始替换标签名称!--------------')
for xmlFile in files:  # 遍历原标签文件夹

    if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
        dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))
        root = dom.documentElement
        #替换节点,除了name也可以替换为其他节点
        pathNode = root.getElementsByTagName('name')
        print(pathNode)
        print(len(pathNode))
        j = len(pathNode)
        for i in range(j):
            if pathNode[i].firstChild.data == "白色口罩" or pathNode[i].firstChild.data == "蓝色口罩" or pathNode[i].firstChild.data == "黑色口罩" :
                print("替换前的名称为:", pathNode[i].firstChild.data)
                pathNode[i].firstChild.data = "已佩戴口罩"
                print("i为:", i)
                print("替换后的名称为:", pathNode[i].firstChild.data)
                i = i + 1
                with open(os.path.join(path, xmlFile), 'w',encoding='utf8') as fh:
                    dom.writexml(fh)

print('------------标签名称替换成功!--------------')

此外:

如上代码是多个标签名称替换为一个标签名称,若需要多个标签名称替换为多个标签名称则需要在原循环中多加入几个if语句,例如:

import os.path
import xml.dom.minidom

# 将"白色口罩、蓝色口罩、黑色口罩"都替换为:"已佩戴口罩"
# path为需要替换标签的目标文件夹
path = 'D:pythonproject\change_label\Annotation_1'
files = os.listdir(path)  # 得到文件夹下所有文件名称
s = []
print('------------开始替换标签名称!--------------')
for xmlFile in files:  # 遍历原标签文件夹

    if not os.path.isdir(xmlFile):  # 判断是否是文件夹,不是文件夹才打开
        dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))
        root = dom.documentElement
        #替换节点,除了name也可以替换为其他节点
        pathNode = root.getElementsByTagName('name')
        print(pathNode)
        print(len(pathNode))
        j = len(pathNode)
        for i in range(j):
            if pathNode[i].firstChild.data == "白色口罩" or pathNode[i].firstChild.data == "蓝色口罩"  :
                print("替换前的名称为:", pathNode[i].firstChild.data)
                pathNode[i].firstChild.data = "已佩戴合格口罩"
                print("i为:", i)
                print("替换后的名称为:", pathNode[i].firstChild.data)
                i = i + 1
                with open(os.path.join(path, xmlFile), 'w',encoding='utf8') as fh:
                    dom.writexml(fh)
            elif pathNode[i].firstChild.data == "黑色口罩" :
                print("替换前的名称为:", pathNode[i].firstChild.data)
                pathNode[i].firstChild.data = "已佩戴不合格口罩"
                print("i为:", i)
                print("替换后的名称为:", pathNode[i].firstChild.data)
                i = i + 1
                with open(os.path.join(path, xmlFile), 'w',encoding='utf8') as fh:
                    dom.writexml(fh)
print('------------标签名称替换成功!--------------')

通过如上操作即可对xml文件部分信息进行批量替换啦!

#############如果各位同学觉得有用的话就麻烦点个赞支持下哈##############