计算机视觉领域是一个比较热门的研究领域,其中涉及到目标检测,实例分割,语义分割等。这里面不可避免地就会涉及到标签修改的问题,如果标签文件少,且一张图里面只有一个目标的话,修改起来还是相对容易,但是实际情况都不是这样,可能一个标签文件里面会存在八九个,甚至十几个object,这就需要用到批量修改的功能,我习惯使用pycharm编辑器进行处理,所以也是用python语言来实现功能。话不多说,直接上代码,首先引入必要的包和库
import xml.dom.minidom # 文档对象类型接口的最小实现
for i in range(0,100,5): #
path1="xxx"+str(i)+'.xml'
path2="xxx"+str(i+1)+'.xml'
path3="xxx"+str(i+2)+'.xml'
path4="xxx"+str(i+3)+'.xml'
path5="xxx"+str(i+4)+'.xml'
path6="xxxz"+str(i)+'.xml'
dom1 = xml.dom.minidom.parse(path1) #加载xml文件
root1 = dom1.documentElement # 获取到根节点
names1 = root1.getElementsByTagName("name") #获取名字为name的根节点属性下面 的值
a1 = names1[0].firstChild.data # 将第一组name属性的值赋值给a1dom2 = xml.dom.minidom.parse(path2)
root2 = dom2.documentElement # 获取到根节点
names2 = root2.getElementsByTagName("name")
a2 = names2[0].firstChild.data # 将第二组name属性的值赋值给a1dom3 = xml.dom.minidom.parse(path3)
root3 = dom3.documentElement # 获取到根节点
names3 = root3.getElementsByTagName("name")
a3 = names3[0].firstChild.datadom4 = xml.dom.minidom.parse(path4)
root4 = dom4.documentElement # 获取到根节点
names4 = root4.getElementsByTagName("name")
a4 = names4[0].firstChild.datadom5 = xml.dom.minidom.parse(path5)
root5 = dom5.documentElement # 获取到根节点
names5 = root5.getElementsByTagName("name")
a5 = names5[0].firstChild.datadom6 = xml.dom.minidom.parse(path6)
root6 = dom6.documentElement # 获取到根节点
names6= root6.getElementsByTagName("name")
names6[0].firstChild.data = a1
names6[1].firstChild.data = a2
names6[2].firstChild.data = a3
names6[3].firstChild.data = a4
names6[4].firstChild.data = a5with open(path1, 'w', encoding='utf-8') as f: #打开对应的xml文件
dom1.writexml(f, addindent=' ', encoding='utf-8') #将修改后的数据写入对应的xml文件
with open(path1, 'w', encoding='utf-8') as f:
dom2.writexml(f, addindent=' ', encoding='utf-8')
with open(path2, 'w', encoding='utf-8') as f:
dom3.writexml(f, addindent=' ', encoding='utf-8')
with open(path3, 'w', encoding='utf-8') as f:
dom4.writexml(f, addindent=' ', encoding='utf-8')
with open(path4, 'w', encoding='utf-8') as f:
dom5.writexml(f, addindent=' ', encoding='utf-8')
with open(path5, 'w', encoding='utf-8') as f:dom6.writexml(f, addindent=' ', encoding='utf-8')
with open(path6, 'w', encoding='utf-8') as f:
以上代码实现的功能就是,假设有100个xml文件,每次读取5个xml文件,取出其中name的值,把这五个name 的属性值写入到另外一个文件夹中的第一个名字叫0.xml的文件中