批量修改xml文件中的内容

批量修改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)

	}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值