目标检测VOC格式数据集标签替换
自己写的,亲测可用
python xml解析树批量替换目标标签
import glob
import os.path
import xml.etree.ElementTree as ET
from pathlib import Path
# 批量读取Annotations下的xml文件
# *************修改参数*******************
xml_dir = r'annotations_new' # 原xml文件 文件夹
replace_name = ['Car', 'Truck', 'Bus', 'Van'] # 需要替换的标签
new_name = 'vehicle' # 新标签
# ***************************************
xml_list = glob.glob(xml_dir + '/*.xml') # 返回所有匹配的 xml文件路径 并组成列表
xml_dir_PATH = Path(xml_dir)
if os.path.exists(xml_dir_PATH):
print('目录\'{}\''.format(xml_dir_PATH))
else:
print('错误:路径\'{}\'不存在'.format(xml_dir_PATH))
for xml in xml_list:
# print(xml)
per_xml = ET.parse(xml) # 读取并加载xml文件到per_xml,xml表示每个xml文件的路径
nodes = per_xml.findall('object') # 非递归查找这个xml文件中所有 object节点 并组成列表
# print(p, type(p))
for per_node in nodes: # 遍历每个object节点
# child = list(per_node)[0] # 找出object节点的子节点child,其中节点name位列第一,所以[0]表示
# print(xml,name)
if per_node.find('name').text in replace_name: # 替换节点text,即标签
old_name = per_node.find('name').text
per_node.find('name').text = new_name
print(xml, ':', old_name, '----→', new_name)
per_xml.write(xml) # 写入xml文件(替换原文件)
print('搜索文件{}'.format(xml))