# coding=utf-8
import os
import os.path
import xml.dom.minidom
"""修改xml路徑"""
def path_1(FindPath,name1,file_name):#獲取文件夾地址,name1:標籤名
if not os.path.isdir(file_name): # 判斷是否是文件夾,不是文件夾纔打開
# print(file_name) # 打印獲取文件名
# 讀取xml文件
dom = xml.dom.minidom.parse(os.path.join(FindPath, file_name))#解析dom節點
root = dom.documentElement
label= root.getElementsByTagName(name1)#標籤列表
return dom,label
def xiugai_path(label):
for i in range(len(label)): # 遍歷文件列表長度
print("打印所有路徑",label[i].firstChild.data)#打印所有路徑
if label[i].firstChild.data[0:62] == "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/":
#print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[
# 62:-3] + "jpg", 1111111111)
#從新賦值
label[i].firstChild.data = "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + label[
i].firstChild.data[
62:-3] + "jpg"
elif label[i].firstChild.data[:28] == "E:\my_own_search\phone\step1":
#print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[29:],
# 22222222222222)
# 從新賦值
label[i].firstChild.data = "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + label[i].firstChild.data[
29:]
elif label[i].firstChild.data.split(".")[1]!="jpg":#判斷圖片後綴是否是jpg
label[i].firstChild.data =label[i].firstChild.data.split(".")[0]+".jpg"
# print("ok,地址:{}".format(label[i].firstChild.data))
else:
# print("可能需要修改值,如:後綴等",label[i].firstChild.data)
print(None)
return len(label)
#修改neme
def xiugai_name(label,t_name=None):
a,b=0,0
c=0
for i in range(len(label)):
c+=1
print("打印所有name",label[i].firstChild.data,"一個XML有幾個name:",c)
if label[i].firstChild.data=="camera":#判斷name是否camera,是修改,不是往下執行
if t_name:
label[i].firstChild.data = "camera1"
a+=1#爲鏡頭
elif label[i].firstChild.data=="0":
label[i].firstChild.data="phone"#從新賦值
b+=1#爲手機
else:
print(label[i].firstChild.data)#不是上面兩種是那種?看看
return a,b
#將修改後的xml文件保存
def baocun(xml_path,dom,file_name):#傳入保存文件路徑和文件名
with open(os.path.join(xml_path, file_name), 'w') as fh:
dom.writexml(fh)
print('寫入{}/pose OK!'.format(file_name[0:-4]))
if __name__=="__main__":
#獲得文件夾中所有文件
FindPath = '/media/hanqing/AI開發/mubiaojiance/sj1'
#要保存地址
xml_path='/media/hanqing/AI開發/mubiaojiance/sj1'
data="name"#需要修改標籤name
a,b=0,0
FileNames = os.listdir(FindPath) # 獲取文件內容列表
print(len(FileNames))
for file_name in FileNames:#循環讀取文件名
# print(file_name)#XML打印文件名
list_1=path_1(FindPath,data,file_name)
c=xiugai_name(list_1[1],1)##修改xml的name
# print(c)
# a+=c[0]#標籤name數量
# b+=c[1]#文件數量
# xiugai_path(list_1[1]) # 1/解開註釋修改路徑方法
baocun(xml_path,list_1[0],file_name)#2/保存數據
# print("鏡頭數量爲:{}".format(a),"手機標籤數量爲:{}".format(b),"xml總數:{}".format(len(FileNames)))
# s = []
# a,b,c=0,0,0
# for file_name in list_1[1]:
# print(file_name)
# if not os.path.isdir(file_name): # 判斷是否是文件夾,不是文件夾纔打開
# print(file_name)#打印獲取文件名
#讀取xml文件
# print(os.path.join(FindPath,file_name))#打印獲取文件路徑
# dom = xml.dom.minidom.parse(os.path.join(FindPath,file_name))
# root = dom.documentElement
# # 獲取標籤對name之間的值
# name = root.getElementsByTagName('name')
# #獲取標籤路徑path
# path_1=root.getElementsByTagName('path')
# print(len(name))
# for i in range(len(path_1)):#遍歷文件列表長度
# #if name[i] .firstChild.data== 'screw cap':
# ##
# if path_1[i].firstChild.data[0:62]=="/home/hanqing/SSD-Tensorflow-master/VOC2019/Annotations/phone/":
# # print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[
# # 62:-3] + "jpg", 1111111111)
# path_1[i].firstChild.data = "/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/"+path_1[i].firstChild.data[62:-3]+"jpg"
# elif path_1[i].firstChild.data[:28]=="E:\my_own_search\phone\step1":
# # print("/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/" + path_1[i].firstChild.data[29:],
# # 22222222222222)
# path_1[i].firstChild.data ="/home/hanqing/SSD-Tensorflow-master/VOC2019/JPEGImages/phone/"+path_1[i].firstChild.data[29:]
# print(len(path_1[i].firstChild.data))#長度
# print(path_1[i].firstChild.data)
# path_1[i].firstChild.data =path_1[i].firstChild.data#name[i].firstChild.data
# print ('修改後的 path')
# print (path_1[i].firstChild.data)
# print(len("/home/hanqing/SSD-Tensorflow-master/VOC2019/Annotations/"))
# c+=1
# if name[i].firstChild.data=="phone":
# a+=1
# else:
# b+=1
# print(a,b,a+b,c)
##將修改後的xml文件保存
# with open(os.path.join(xml_path, file_name), 'w') as fh:
# dom.writexml(fh)
# print('寫入name/pose OK!')
python 修改xml各個節點的值
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.