欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Python實(shí)現(xiàn)批量修改xml文件的腳本

 更新時(shí)間:2022年11月04日 10:24:00   作者:夏天是冰紅茶  
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python實(shí)現(xiàn)批量修改xml文件功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下

今天分享一個(gè)我自己寫(xiě)的實(shí)用腳本,主要是將.xml文件進(jìn)行批量的修改

首先,聲明我并不是很了解.xml的相關(guān)知識(shí),所以今天主要是以我遇到的問(wèn)題來(lái)做個(gè)記錄。

想要更多的了解xml,請(qǐng)看最后的資料分享。

效果展示:

因?yàn)檫@些是屬于我們項(xiàng)目小組的,我也不清楚是不是有什么不能公開(kāi)的,我就截取了一小部分,原本是用lambelme來(lái)修改的,但由于xml文件似乎讀不進(jìn)去,所以只有手動(dòng)修改,將water改為blue(重要的是一個(gè)一個(gè)用記事本打開(kāi),手動(dòng)修改),這時(shí)候我的第一生產(chǎn)力產(chǎn)生了,because I am lazy。

這是下面的pyxml.py文件

import os
import os.path
import xml.dom.minidom as md
 
path = 'E:\\Deeplearning\\Road_Detect_Project\\road_surface_mark\\Annot\\'
files = os.listdir(path)  # 得到文件夾下所有文件名稱
def main():
    for xmlFile in files:  # 遍歷文件夾
        if not os.path.isdir(xmlFile):  # 判斷是否是文件夾,不是文件夾才打開(kāi)
 
            dom = md.parse(os.path.join(path,xmlFile))
            root = dom.documentElement
            names = root.getElementsByTagName('name')  #對(duì)某個(gè)標(biāo)簽進(jìn)行修改
            # print(name[0].firstChild.data)
            for i in range(len(names)):
                print(names[i].firstChild.data)
                a=names[i].firstChild.data
                print(type(a))
                names[i].firstChild.data = "red"
                print(names[i].firstChild.data)
            with open(os.path.join(path,xmlFile), 'w') as fh:
                dom.writexml(fh)
                print('夏天是冰紅茶的文件成功寫(xiě)入')  #使用時(shí),請(qǐng)不要?jiǎng)h除這段
 
if __name__ == '__main__':
    main()

 我說(shuō)一下問(wèn)題,因?yàn)樾〗M的其他師兄有用中文路徑,就會(huì)發(fā)生下面的情況:

但是記事本打開(kāi)是正常的,也已經(jīng)修改成功了。

我查了,是因?yàn)榫幋a的問(wèn)題,可以把XML文件的格式用記事本另存為ANSI就可以了(我不知道怎么另存為,可以看到記事本里面的編碼格式是ANSI,所以我覺(jué)得這個(gè)方法是行得通的),還可以將第一行修改為

<?xml version="1.0" encoding="GBK"?>

這種我是成功了。(別建議我打馬賽克)下次組會(huì),我一定要提這個(gè)問(wèn)題,以前因?yàn)槁窂街杏兄形某粤撕芏嗵?,所以我現(xiàn)在建工程都是盡量去用英文。

補(bǔ)充

除了上文的方法,小編還為大家整理了Python修改xml文件的其他方法,需要的可以參考一下

批量修改xml文件中指定位置內(nèi)容

我要修改圖片的絕對(duì)路徑

#!/usr/bin/python
'''
此文件用于整理網(wǎng)絡(luò)上搜集的數(shù)據(jù)集的xml文件,整理后方便用于訓(xùn)練。

'''
import os       #文件操作相關(guān)
import xml.etree.ElementTree as ET  #xml文件操作相關(guān)

"""  "*******************************************************************************************
*函數(shù)功能 :

*輸入?yún)?shù) :輸入裁剪后圖像,
*返 回 值 :無(wú)
*編寫(xiě)時(shí)間 : 2021.7.12
*作    者 : diyun
********************************************************************************************"""
# 批量修改整個(gè)文件夾所有的xml文件
def change_all_xml(xmlfilepath,string1):
    total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夾包含的文件或文件夾的名字的列表。

    num = len(total_xml)  # xml文件個(gè)數(shù)
    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標(biāo)簽,
        #print(obj)
        path_text = obj.text
        #print(path_text)
        end = "\\"
        string2 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一個(gè)正斜杠/后面的字符,圖片名稱
        #print(string2)
        path_text_1=string1+string2
        #print("path_text_1:",path_text_1)
        obj.text = path_text_1  # 修改標(biāo)簽內(nèi)容
        tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改


xmlfilepath = 'helmet_xml'  # xml文件保存地址
# 要修改的內(nèi)容
string1='E:\\1_Training_picture\\6_helmet\\helmet_train'

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

修改path和filename

#!/usr/bin/python
'''
此文件用于整理網(wǎng)絡(luò)上搜集的數(shù)據(jù)集的xml文件,整理后方便用于訓(xùn)練。

'''
import os       #文件操作相關(guān)
import xml.etree.ElementTree as ET  #xml文件操作相關(guān)

"""  "*******************************************************************************************
*函數(shù)功能 :

*輸入?yún)?shù) :輸入裁剪后圖像,
*返 回 值 :無(wú)
*編寫(xiě)時(shí)間 : 2021.7.12
*作    者 : diyun
********************************************************************************************"""
# 批量修改整個(gè)文件夾所有的xml文件
def change_all_xml(xmlfilepath,string1):
    total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夾包含的文件或文件夾的名字的列表。

    num = len(total_xml)  # xml文件個(gè)數(shù)
    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標(biāo)簽,
        #print(obj)
        path_text = obj.text
        #print(path_text)
        #end = "."
        end = "."
        string3 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一個(gè)反斜杠\后面的字符,圖片名稱
        #print("string3:", string3)
        end = "."
        #string4 = string3[string3.rfind(end):]  # 在strint1中查找最后一個(gè)正斜杠/后面的字符,圖片名稱
        #print("string4:", string4)

        #print("xmlfile:", xmlfile)
        #print("string1:", string1)
        end = "."
        string2 = xmlfile[:xmlfile.rfind(end)]  # 在strint1中查找最后一個(gè)正斜杠/后面的字符,圖片名稱
        #print("string2:", string2)
        path_text_1 = string1 + string2+string3
        #print("path_text_1:",path_text_1)
        obj.text = path_text_1  # 修改標(biāo)簽內(nèi)容
        #tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
        obj_2 = root.find('filename')  # 找到filename標(biāo)簽
        #print("obj_2:", obj_2)
        path_text_2= string2+string3
        #print("path_text_2:", path_text_2)
        obj_2.text = path_text_2  # 修改標(biāo)簽內(nèi)容
        tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改

#xmlfilepath = 'temp'  # xml文件保存地址
xmlfilepath = 'helmet_xml'  # xml文件保存地址
# 要修改的內(nèi)容
string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'

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

最終版本

#!/usr/bin/python
'''
此文件用于整理網(wǎng)絡(luò)上搜集的數(shù)據(jù)集的xml文件,整理后方便用于訓(xùn)練。

'''
import os       #文件操作相關(guān)
import xml.etree.ElementTree as ET  #xml文件操作相關(guān)
import cv2
#PRINT_FLAG=True
PRINT_FLAG=False

"""  "*******************************************************************************************
*函數(shù)功能 :

*輸入?yún)?shù) :輸入裁剪后圖像,
*返 回 值 :無(wú)
*編寫(xiě)時(shí)間 : 2021.7.12
*作    者 : diyun
********************************************************************************************"""
# 批量修改整個(gè)文件夾所有的xml文件
def change_all_xml(xmlfilepath,string1):
    total_xml = os.listdir(xmlfilepath)  # 用于返回指定的文件夾包含的文件或文件夾的名字的列表。

    num = len(total_xml)  # xml文件個(gè)數(shù)
    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標(biāo)簽,
        #print(obj)
        path_text = obj.text
        #print(path_text)
        #end = "."
        end = "."
        string3 = path_text[path_text.rfind(end):]  # 在strint1中查找最后一個(gè)反斜杠\后面的字符,圖片名稱
        #print("string3:", string3)
        end = "."
        #string4 = string3[string3.rfind(end):]  # 在strint1中查找最后一個(gè)正斜杠/后面的字符,圖片名稱
        #print("string4:", string4)

        #print("xmlfile:", xmlfile)
        #print("string1:", string1)
        end = "."
        string2 = xmlfile[:xmlfile.rfind(end)]  # 在strint1中查找最后一個(gè)正斜杠/后面的字符,圖片名稱
        #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  # 修改標(biāo)簽內(nèi)容
        #tree.write('%s/%s' % (xmlfilepath, xmlfile))  # 保存修改
        obj_2 = root.find('filename')  # 找到filename標(biāo)簽
        #
        path_text_2= string2+string3
        #
        obj_2.text = path_text_2  # 修改標(biāo)簽內(nèi)容
        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文件保存地址
# 要修改的內(nèi)容
string1='E:\\1_Training_picture\\6_helmet\\helmet_train\\'

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

到此這篇關(guān)于Python實(shí)現(xiàn)批量修改xml文件的腳本的文章就介紹到這了,更多相關(guān)Python批量修改xml文件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • python調(diào)用bash?shell腳本方法

    python調(diào)用bash?shell腳本方法

    這篇文章主要給大家分享了額python調(diào)用bash?shell腳本方法,os.system(command)、os.popen(command)等方法,具有一定的參考價(jià)值,需要的小伙伴可以參考一下,希望對(duì)你有所幫助
    2021-12-12
  • Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能完整實(shí)例

    Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能完整實(shí)例

    這篇文章主要介紹了Python實(shí)現(xiàn)基于多線程、多用戶的FTP服務(wù)器與客戶端功能,結(jié)合完整實(shí)例形式分析了Python多線程、多用戶FTP服務(wù)器端與客戶端相關(guān)實(shí)現(xiàn)技巧與注意事項(xiàng),需要的朋友可以參考下
    2017-08-08
  • Python多線程模塊Threading用法示例小結(jié)

    Python多線程模塊Threading用法示例小結(jié)

    這篇文章主要介紹了Python多線程模塊Threading用法,結(jié)合實(shí)例形式分析了Python多線程模塊Threading相關(guān)概念、原理、進(jìn)程與線程的區(qū)別及使用技巧,需要的朋友可以參考下
    2019-11-11
  • 快速進(jìn)修Python指南之面向?qū)ο筮M(jìn)階

    快速進(jìn)修Python指南之面向?qū)ο筮M(jìn)階

    這篇文章主要為大家介紹了Java開(kāi)發(fā)者快速進(jìn)修Python指南之面向?qū)ο筮M(jìn)階,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-12-12
  • Django DRF APIView源碼運(yùn)行流程詳解

    Django DRF APIView源碼運(yùn)行流程詳解

    這篇文章主要介紹了Django DRF APIView源碼運(yùn)行流程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • 代碼詳解django中數(shù)據(jù)庫(kù)設(shè)置

    代碼詳解django中數(shù)據(jù)庫(kù)設(shè)置

    在本篇文章里小編給大家分享了關(guān)于django中數(shù)據(jù)庫(kù)設(shè)置的相關(guān)實(shí)例內(nèi)容,有興趣的朋友們跟著學(xué)習(xí)下。
    2019-01-01
  • python中re模塊知識(shí)點(diǎn)總結(jié)

    python中re模塊知識(shí)點(diǎn)總結(jié)

    在本篇文章里小編給大家整理的是一篇關(guān)于python中re模塊知識(shí)點(diǎn)總結(jié)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2021-01-01
  • Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼

    Python實(shí)現(xiàn)清理重復(fù)文件功能的示例代碼

    在電腦上或多或少的存在一些重復(fù)文件,體積小的倒沒(méi)什么,如果體積大的就很占內(nèi)存了。本文用python制作了一個(gè)刪除重復(fù)文件的小工具,核心代碼很簡(jiǎn)單,希望對(duì)你有所幫助
    2022-07-07
  • 一個(gè)Python優(yōu)雅的數(shù)據(jù)分塊方法詳解

    一個(gè)Python優(yōu)雅的數(shù)據(jù)分塊方法詳解

    在做需求過(guò)程中有一個(gè)對(duì)大量數(shù)據(jù)分塊處理的場(chǎng)景,具體來(lái)說(shuō)就是幾十萬(wàn)量級(jí)的數(shù)據(jù),分批處理,每次處理100個(gè)。這時(shí)就需要一個(gè)分塊功能的代碼。本文為大家分享了一個(gè)Python中優(yōu)雅的數(shù)據(jù)分塊方法,需要的可以參考一下
    2022-05-05
  • python生成器表達(dá)式和列表解析

    python生成器表達(dá)式和列表解析

    最近在學(xué)習(xí)python的過(guò)程中,對(duì)列表解析及生成器表達(dá)式有點(diǎn)疑惑。從表面上看,兩者很相似,只有一點(diǎn)不同:列表解析采用中括號(hào)[]來(lái)包含,生成器表達(dá)式采用小括號(hào)()來(lái)包含。本文我們就來(lái)詳細(xì)看下python生成器表達(dá)式和列表解析
    2016-03-03

最新評(píng)論