批量修改xml文件中的内容
# -*- coding:utf-8 -*-
# author:史世杰
# datetime:2021/12/24 15:34
# readme:该脚本是改变xml文件里面内容的。
import os
import xml.etree.ElementTree as ET
def get_xml(path):
"""
遍历文件夹,获取每个文件夹下的xml文件,
:param path: 传递文件夹所在路径
:return: 返回一个xml_list(每个xml的绝对路径,用于后面解析xml文件)
"""
xml_list = [] # 是xml文件的绝对路径列表
xml_name = [] # 是xml文件名称列表
jpg_list = [] # 是jpg文件的绝对路径列表
jpg_name = [] # 是jpg文件的名称列表
file_data = os.listdir(path)
for xml_file in file_data: # 遍历目录,为xml文件的加入到xml列表中去
if xml_file.endswith("xml"):
xml_file_path = path + xml_file # 拼接最终的xml绝对路径
xml_list.append(xml_file_path)
xml_name.append(xml_file)
if xml_file.endswith("jpg"):
jpg_file_path = path + xml_file # 拼接最终的xml绝对路径
jpg_list.append(jpg_file_path)
jpg_name.append(xml_file)
return xml_list,xml_name,jpg_list,jpg_name
def update_xml(path,new_path):
"""
修改每个xml文件
:param path: 传递文件夹所在路径
:return:
"""
class_list=[]
xml_list,xml_name,jpg_list,jpg_name = get_xml(path) # 获取xml_list
flag0,flage1=0,0
for xml_file_path in xml_name:
tree = ET.parse(path +xml_file_path) # 解析xml文件
root = tree.getroot() # 获取根节点
for obj in root.iter('object'):
cls = obj.find('name').text
if cls==befor_name0:
obj.find('name').text=after_name0
flag0+=1
if cls==befor_name1:
obj.find('name').text=after_name1
flag0+=1
tree.write(new_path +xml_file_path, encoding='utf-8')
print(flag0,flage1)
if __name__ == '__main__':
befor_name0='xuhan'
after_name0='kaihan'
befor_name1='xianzhuangquexian'
after_name1='huahen'
## xml文件地址
xmlpath=r'/home/shishijie/shishijie_projects/Foundation_Model/dataset/VOC2007-7-9/xml/'
new_path=r'/home/shishijie/shishijie_projects/Foundation_Model/dataset/VOC2007-7-9/new_xml/'
update_xml(xmlpath,new_path)
}