python批量修改xml文件的标签属性值

一、使用背景

之前在ubuntu下做过yolov3目标检测的项目(Pascal VOC数据集),近期ubuntu重装过,所以…标签文件中的路径都错了,labelImg无法关联图片和标签文件,对训练也有影响。
因此需要用python批量修改xml中 filename和path两个属性值
在这里插入图片描述
所以…找轮子发现了-> https://blog.csdn.net/qq_41983165/article/details/87977712
貌似有很多错误,无法直接用。但提供了很好的思路,在此感谢
对其优化和修改后: 可以直接批量完整替换掉path,

以下代码,使用时要修改为自己的路径,且要保证修改前标签文件名和图片名保持一致,代码很简单,自己看吧

import xml.dom.minidom
import os


path='/home/hujl/dev/darknet-master/scripts/VOCdevkit/VOC2007/Annotations' 			# 原来xml文件存放的路径
sv_path='/home/hujl/dev/darknet-master/scripts/VOCdevkit/VOC2007/Annotations1' 	# 修改后的xml文件存放路径
files=os.listdir(path)
for xmlFile in files:
	dom=xml.dom.minidom.parse(os.path.join(path,xmlFile)) 	#打开xml文件,送到dom解析
	root=dom.documentElement
	item=root.getElementsByTagName('path') 				# 获取path这一node名字及相关属性值
	a,b = os.path.splitext(xmlFile)							# 并没有取filename标签名,而直接用的文件名,保险期间还是用filename
	for i in item:
		i.firstChild.data='/home/hujl/dev/darknet-master/scripts/VOCdevkit/VOC2007/JPEGImages/'  # xml文件对应的图片路径
	with open(os.path.join(sv_path,xmlFile),'w') as fh:							
		dom.writexml(fh)					#将图片名 之前的路径全部替换

	# 在路径后面 添加图片名 如 000001.jpg
	for j in item:
		i.firstChild.data += (a + '.jpg')
	with open(os.path.join(sv_path,xmlFile),'w') as filenames:
		dom.writexml(filenames)

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值