批量修改xml文件中指定位置内容
我要修改图片的绝对路径
在这里插入图片描述
在这里插入图片描述

#!/usr/bin/python
'''
此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。

'''
import os       #文件操作相关
import xml.etree.ElementTree as ET  #xml文件操作相关

"""  "*******************************************************************************************
*函数功能 :

*输入参数 :输入裁剪后图像,
*返 回 值 :无
*编写时间 : 2021.7.12
*作    者 : diyun
********************************************************************************************"""
# 批量修改整个文件夹所有的xml文件
def change_all_xml(xmlfilepath,string1):
    total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。

    num = len(total_xml)  # xml文件个数
    print(num)
    print(total_xml[0])
    for xmlfile in total_xml:
        #print(xml_id)
        in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
        #print(in_file)

        tree = ET.parse(in_file)
        #print(tree)
        root = tree.getroot()
        #print(root)
        obj = root.find('path')  # 找到filename标签,
        #print(obj)
        path_text = obj.text
        #print(path_text)
        end = "\\"
        string2 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
        #print(string2)
        path_text_1=string1+string2
        #print("path_text_1:",path_text_1)
        obj.text = path_text_1  # 修改标签内容
        tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改


xmlfilepath = 'helmet_xml'  # xml文件保存地址
# 要修改的内容
string1='E:\\1_Training_picture\\6_helmet\\helmet_train'

change_all_xml(xmlfilepath,string1)
print("ok")

2、修改path和filename

#!/usr/bin/python
'''
此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。

'''
import os       #文件操作相关
import xml.etree.ElementTree as ET  #xml文件操作相关

"""  "*******************************************************************************************
*函数功能 :

*输入参数 :输入裁剪后图像,
*返 回 值 :无
*编写时间 : 2021.7.12
*作    者 : diyun
********************************************************************************************"""
# 批量修改整个文件夹所有的xml文件
def change_all_xml(xmlfilepath,string1):
    total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。

    num = len(total_xml)  # xml文件个数
    print(num)
    print(total_xml[0])
    for xmlfile in total_xml:
        #print("**********************************************************************************************************")
        #print(xmlfile)
        in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
        #print(in_file)

        tree = ET.parse(in_file)
        #print(tree)
        root = tree.getroot()
        #print(root)
        obj = root.find('path')  # 找到filename标签,
        #print(obj)
        path_text = obj.text
        #print(path_text)
        #end = "."
        end = "."
        string3 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一个反斜杠\后面的字符,图片名称
        #print("string3:", string3)
        end = "."
        #string4 = string3[string3.rfind(end):]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
        #print("string4:", string4)

        #print("xmlfile:", xmlfile)
        #print("string1:", string1)
        end = "."
        string2 = xmlfile[:xmlfile.rfind(end)]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
        #print("string2:", string2)
        path_text_1 = string1 + string2+string3
        #print("path_text_1:",path_text_1)
        obj.text = path_text_1  # 修改标签内容
        #tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
        obj_2 = root.find('filename')  # 找到filename标签
        #print("obj_2:", obj_2)
        path_text_2= string2+string3
        #print("path_text_2:", path_text_2)
        obj_2.text = path_text_2  # 修改标签内容
        tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改

#xmlfilepath = 'temp'  # xml文件保存地址
xmlfilepath = 'helmet_xml'  # xml文件保存地址
# 要修改的内容
string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'

change_all_xml(xmlfilepath,string1)
print("ok")

最终版本

#!/usr/bin/python
'''
此文件用于整理网络上搜集的数据集的xml文件,整理后方便用于训练。

'''
import os       #文件操作相关
import xml.etree.ElementTree as ET  #xml文件操作相关
import cv2
#PRINT_FLAG=True
PRINT_FLAG=False

"""  "*******************************************************************************************
*函数功能 :

*输入参数 :输入裁剪后图像,
*返 回 值 :无
*编写时间 : 2021.7.12
*作    者 : diyun
********************************************************************************************"""
# 批量修改整个文件夹所有的xml文件
def change_all_xml(xmlfilepath,string1):
    total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夹包含的文件或文件夹的名字的列表。

    num = len(total_xml)  # xml文件个数
    print(num)
    print(total_xml[0])
    for xmlfile in total_xml:
        #print("**********************************************************************************************************")
        #print(xmlfile)
        in_file = open('%s/%s' % (xmlfilepath, xmlfile),encoding = 'UTF-8')
        #print(in_file)

        tree = ET.parse(in_file)
        #print(tree)
        root = tree.getroot()
        #print(root)
        obj = root.find('path')  # 找到filename标签,
        #print(obj)
        path_text = obj.text
        #print(path_text)
        #end = "."
        end = "."
        string3 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一个反斜杠\后面的字符,图片名称
        #print("string3:", string3)
        end = "."
        #string4 = string3[string3.rfind(end):]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
        #print("string4:", string4)

        #print("xmlfile:", xmlfile)
        #print("string1:", string1)
        end = "."
        string2 = xmlfile[:xmlfile.rfind(end)]  # 在strint1中查找最后一个正斜杠/后面的字符,图片名称
        #print("string2:", string2)
        path_text_1 = string1 + string2+string3
        try:
            #print("path_text_1:", path_text_1)
            image = cv2.imread(path_text_1,1)
            image.shape
            #cv2.imshow("aa",image)
            #cv2.waitKey(2000)

            #print('Open image ok! ')
        except:
            print('1111:Open image Error! Try again!')
            print("path_text_1:", path_text_1)
            string3='.jpg'
            path_text_1 = string1 + string2 + string3
            print("path_text_1:", path_text_1)
            try:
                #print("path_text_1:", path_text_1)
                image = cv2.imread(path_text_1, 1)
                image.shape
                #cv2.imshow("aa",image)
                #cv2.waitKey(2000)
                print('Open image ok! ')
                print('*****************************************************************************')
            except:
                print('222 : Open image Error! Try again!')
                string3=".jpg"
                path_text_1 = string1 + string2 + string3
                print("path_text_1:", path_text_1)

        #print("path_text_1:",path_text_1)
        obj.text = path_text_1  # 修改标签内容
        #tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
        obj_2 = root.find('filename')  # 找到filename标签
        #
        path_text_2= string2+string3
        #
        obj_2.text = path_text_2  # 修改标签内容
        if PRINT_FLAG==True:
            print("string1:", string1)
            print("string2:", string2)
            print("string3:", string3)
            print("path_text_1:", path_text_1)
            print("obj_2:", obj_2)
            print("path_text_2:", path_text_2)
        tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改

#xmlfilepath = 'temp'  # xml文件保存地址
xmlfilepath = 'helmet_xml'  # xml文件保存地址
# 要修改的内容
string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'

change_all_xml(xmlfilepath,string1)
print("ok")
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐