<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
今天分享一個我自己寫的實用指令碼,主要是將.xml檔案進行批次的修改
首先,宣告我並不是很瞭解.xml的相關知識,所以今天主要是以我遇到的問題來做個記錄。
想要更多的瞭解xml,請看最後的資料分享。
效果展示:
因為這些是屬於我們專案小組的,我也不清楚是不是有什麼不能公開的,我就擷取了一小部分,原本是用lambelme來修改的,但由於xml檔案似乎讀不進去,所以只有手動修改,將water改為blue(重要的是一個一個用記事本開啟,手動修改),這時候我的第一生產力產生了,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): # 判斷是否是資料夾,不是資料夾才開啟 dom = md.parse(os.path.join(path,xmlFile)) root = dom.documentElement names = root.getElementsByTagName('name') #對某個標籤進行修改 # 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('夏天是冰紅茶的檔案成功寫入') #使用時,請不要刪除這段 if __name__ == '__main__': main()
我說一下問題,因為小組的其他師兄有用中文路徑,就會發生下面的情況:
但是記事本開啟是正常的,也已經修改成功了。
我查了,是因為編碼的問題,可以把XML檔案的格式用記事本另存為ANSI就可以了(我不知道怎麼另存為,可以看到記事本里面的編碼格式是ANSI,所以我覺得這個方法是行得通的),還可以將第一行修改為
<?xml version="1.0" encoding="GBK"?>
這種我是成功了。(別建議我打馬賽克)下次組會,我一定要提這個問題,以前因為路徑中有中文吃了很多虧,所以我現在建工程都是儘量去用英文。
補充
除了上文的方法,小編還為大家整理了Python修改xml檔案的其他方法,需要的可以參考一下
批次修改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")
修改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")
到此這篇關於Python實現批次修改xml檔案的指令碼的文章就介紹到這了,更多相關Python批次修改xml檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45