-
python批量修改xml文件内容
2020-07-06 12:53:32修改前的xml文件 aachen_000000_000019_leftImg8bit.xml 在这里插入代码片 #python import xml.etree.ElementTree as ET import numpy as np import os '''由于cityperson行人数据集图片较大,将图片裁剪成4份,...由于cityperson数据集图片较大,因此将图片裁剪成4份,同时对应修改标注信息
链接: cityperson图片裁剪.
修改前的xml文件 aachen_000000_000019_leftImg8bit
.xml
#python import xml.etree.ElementTree as ET import numpy as np import os '''由于cityperson行人数据集图片较大,将图片裁剪成4份,同时对应修改标注信息其中左下裁剪图片代码如下,其他位置对应修改裁剪坐标即可,同时修改标注信息。''' i=1000000 #批量修改Xml文件#xml文件存放路径/文件夹xml_path=r'F:\cityperson\citypersons2voc-master\cps_dvkt_w10hv50_ignore1\data\Annotations\\' filelist = os.listdir(xml_path)#获取所有的.xml文件 for filename in filelist: #遍历所有的.xml文件 tree=ET.parse(xml_path + filename)#打开文件 #objs=tree.findall('object') root = tree.getroot() for wid in root.findall('size'):#查找“size”属性 wid.find('width').text='1280'#修改width值 wid.find('height').text='768'#修改height值 #删除不符合要求的bbox框 for obj in root.findall('object'): #print(obj) bbox=obj.find('bndbox') #print(bbox) #获取bbox坐标信息 x1=float(bbox.find('xmin').text)-1 y1=float(bbox.find('ymin').text)-1 x2=float(bbox.find('xmax').text)-1 y2=float(bbox.find('ymax').text)-1 if x2<=1280 and y2<=768: #由于左下裁剪图片都是从0开始,无需修改标注 continue else: root.remove(obj)#删除bndbox #另保存XML文件 path='F:\cityperson\citypersons2voc-master\cps_dvkt_w10hv50_ignore1\data\Annotations_1' savepath=os.path.join(path,str(i)+'.xml') tree.write(savepath) i=i+1 print('完成')
修改后的xml文件 aachen_000000_000019_leftImg8bit
.xml
-
delphi 批量修改xml文件内容
2016-09-13 10:11:06谁有没有好办法,能批量修改添加题目进这个xml文件中?我的想法是用Delphi再做一个小程序实现这个功能,但是没有具体的思路,哪位大神给点建议? 题目大致如下图: [img=... -
批量修改xml文件下某个标签内容/文件存储路径
2020-11-26 18:30:07批量修改xml文件下某个标签内容/文件存储路径 被labelimg框图逼疯的我,参考了好久的资料,含泪写下了这个批量处理标签的文件,废话不多说了,直接上货。 一、待处理的xml文件内容 <annotation> <folder&...批量修改xml文件下某个标签内容/文件存储路径
被labelimg框图逼疯的我,参考了好久的资料,含泪写下了这个批量处理标签的文件,废话不多说了,直接上货。
一、待处理的xml文件内容
<annotation> <folder>JPEGImages</folder> <filename>0037</filename> <path>H:\labelImg-master\windows_v1.2.2\data\voc\VOCdevkit\VOC2019\JPEGImages\0037.jpg</path> <source> <database>Unknown</database> </source> <size> <width>413</width> <height>347</height> <depth>3</depth> </size> <segmented>0</segmented> <object> <name>云</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>156</xmin> <ymin>161</ymin> <xmax>171</xmax> <ymax>189</ymax> </bndbox> </object> <object> <name>A</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>170</xmin> <ymin>161</ymin> <xmax>185</xmax> <ymax>191</ymax> </bndbox> </object> <object> <name>2</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>189</xmin> <ymin>161</ymin> <xmax>204</xmax> <ymax>191</ymax> </bndbox> </object> <object> <name>7</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>203</xmin> <ymin>162</ymin> <xmax>217</xmax> <ymax>189</ymax> </bndbox> </object> <object> <name>0</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>217</xmin> <ymin>162</ymin> <xmax>229</xmax> <ymax>188</ymax> </bndbox> </object> <object> <name>3</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>230</xmin> <ymin>163</ymin> <xmax>245</xmax> <ymax>190</ymax> </bndbox> </object> <object> <name>Q</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>243</xmin> <ymin>164</ymin> <xmax>258</xmax> <ymax>191</ymax> </bndbox> </object> <object> <name>plate</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>137</xmin> <ymin>145</ymin> <xmax>277</xmax> <ymax>208</ymax> </bndbox> </object> </annotation>
二、需要修改的地方
<folder>JPEGImages</folder> <filename>0037</filename> <path>H:\labelImg-master\windows_v1.2.2\data\voc\VOCdevkit\VOC2019\JPEGImages\0037.jpg</path>
<object> <name>plate</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>137</xmin> <ymin>145</ymin> <xmax>277</xmax> <ymax>208</ymax> </bndbox> </object>
1、将folder标签内容"JPEGImages"改为"pic"
2、将path标签内容改为F:\ai_models\REALCP-position-20201124\pic\xxx
3、将filename标签内容"0037"改为path标签中的路径下最后的文件名xxx,两者要保持一致
4、将object标签下属性内容"name"的值"plate"改为"pb"
5、只保留name属性值为’pb’的object节点三、实现代码
#################################################################################### ''' 功能:1、保留、修改xml文件某标签内容 2、修改xml文件存放路径,文件名,照片来源等 3、本方法采用字符串方式解析打开,删除/保存xml文件 ''' #################################################################################### import xml.etree.ElementTree as ET import os def change_xml(): """ 功能: 1、保留、修改xml文件某标签内容 2、修改xml文件存放路径,文件名,照片来源等 3、本方法采用字符串方式解析打开,删除/保存xml文件 4、方法是在Windows系统下运行的,方法中的路径请根据不同系统自行更改 """ path = "E:\\znashi\\" # xml文件存放路径 save_path = "F:\\ai_models\\REALCP-position-20201124\\xml\\" # 修改后的xml文件存放路径 imgpath = "F:\\ai_models\\REALCP-position-20201124\\pic\\" # 新的照片path路径 files = os.listdir(path) # 读取路径下所有文件名 for xmlFile in files: if xmlFile.endswith('.xml'): tree = ET.ElementTree(file=path + xmlFile) # 打开xml文件,送到tree解析 root = tree.getroot() # 得到文档元素对象 root[0].text = 'pic' # root[0].text是annotation下第一个子节点中内容,直接赋值替换文本内容 root[1].text = xmlFile root[1].text = root[1].text.replace('xml','jpg') #修改根节点下的内容 # root[1].text = root[1].text.split('.')[0] #根据需求决定要不要文件名后缀 root[2].text = imgpath + xmlFile for object in root.findall('object'): name = object.find('name').text # 获取每一个object节点下name节点的内容 if name == 'plate': object.find('name').text = str('pb') #修改指定标签的内容 else: root.remove(object) # 删除除了name属性值为'plate'之外object节点的所有object节点 tree.write(save_path + xmlFile) # 替换后的内容保存在内存中需要将其写出 if __name__ =="__main__": change_xml()
四、修改后的xml文件内容
<annotation> <folder>pic</folder> <filename>466.jpg</filename> <path>F:\ai_models\REALCP-position-20201124\pic\466.jpg</path> <source> <database>Unknown</database></source> <size> <width>310</width> <height>239</height> <depth>"3"</depth></size> <segmented>0</segmented> <object> <name>pb</name> <pose>Unspecified</pose> <truncated>0</truncated> <difficult>0</difficult> <bndbox> <xmin>68</xmin> <ymin>62</ymin> <xmax>248</xmax> <ymax>179</ymax></bndbox></object> </annotation>
总结
在这期间我也学习了一写批量处理文件重命名、批量复制文件的方法:
方法一:进入某个文件夹,Ctrl+A选中所有文件,右键首个文件,重命名后,按下F2功能键完成所有文件按照数字递增模式重命名,但是这种方法批量重命名后面会有个括号,那怎么去掉括号呢?别着急,下面送上解决方案:去除批量重命名中的括号
方法二:这个方法采用DOS命令和表格处理的方法实现批量重命名,这对于游客来说,感觉就很“高大上”了,不多说,写到这儿了我不想在打字了,直接上网址啦:DOS命令实现批量重命名
方法三:对于复制指定内容时,可以使用方法二中的方法获得所有文件名,然后继续通过DOS指令实现批量复制,指令很简单,易理解易学:DOS命令实现批量复制指定文件 -
使用python批量修改xml文件中的节点内容!
2019-04-04 19:14:02使用 os.listdir( ) 批量读取文件夹下的文件,然后循环相应的xml文件,并使用getElementsByTagName函数修改节点内容。 2.代码如下: import os import xml.dom.minidom import xml.etree.ElementTree xmldir = '...1.大体流程
使用 os.listdir( ) 批量读取文件夹下的文件,然后循环相应的xml文件,并使用getElementsByTagName函数修改节点内容。
2.代码如下:
import os import xml.dom.minidom import xml.etree.ElementTree xmldir = '/home/dulingwen/xml/' #你的xml文件的路經,注意最后一定要有'/' for xmlfile in os.listdir(xmldir): xmlname = os.path.splitext(xmlfile)[0] #读取 xml 文件 dom = xml.dom.minidom.parse(os.path.join(xmldir,xmlfile)) root = dom.documentElement #获取标签对的名字,并为其赋一个新值 root.getElementsByTagName('filename')[0].firstChild.data = xmlname + '.jpg' root.getElementsByTagName('path')[0].firstChild.data = \ '/home/dulingwen/Pictures/road/' + xmlname + '.jpg' root.getElementsByTagName('width')[0].firstChild.data = '2084' root.getElementsByTagName('height')[0].firstChild.data = '2084' #修改并保存文件 xml_specific = xmldir + xmlfile with open(xml_specific,'w') as fh: dom.writexml(fh)
-
深度学习常用的工具(2)批量修改xml文件中的标签属性
2020-12-21 00:11:29批量修改xml文件中的标签属性 """ 批量修改xml文件中的标签属性 对folder,filename和path内容进行修改,并同时去除文件名中的中文汉字 """ import re import os import xml.etree.ElementTree as ET def change_xml... -
批量修改xml文件中的name属性
2020-10-05 11:46:02name属性名可以随意更改,如原本未have_mask,现在改为have_mask。 如原来的xml中name属性为: 现在需要将name:have_mask更改为face...#批量修改xml中内容 def test(): path = "D:\label_mask/"#xml文件所在的目录name属性名可以随意更改,如原本未have_mask,现在改为have_mask。
如原来的xml中name属性为:
现在需要将name:have_mask更改为face_mask。
代码如下:```python import os import os.path from xml.etree.ElementTree import parse, Element #批量修改xml中内容 def test(): path = "D:\label_mask/"#xml文件所在的目录 files = os.listdir(path) # 得到文件夹下所有文件名称 s = [] for xmlFile in files: # 遍历文件夹 if not os.path.isdir(xmlFile): # 判断是否是文件夹,不是文件夹才打开 print xmlFile pass path = "D:\label_mask/" print(xmlFile) path1 = "D:\label_mask/"+xmlFile#定位当前处理的文件的路径 newStr = os.path.join(path, xmlFile) name = "face_mask" dom = parse(newStr) ###最核心的部分,路径拼接,输入的是具体路径 root = dom.getroot() print(root) for obj in root.iter('object'):#获取object节点中的name子节点 obj.find('name').text=name name1 = obj.find('name').text#修改 print(name1) dom.write(path1, xml_declaration=True)#保存到指定文件 pass if __name__ == '__main__': test()
-
Python 修改xml文件内容——批量更改Labelimg标签.xml文件路文件夹名
2019-08-28 11:03:26Python 修改xml文件内容——批量更改Labelimg标签文件路文件夹名目的原始文件与想要的结果对比图代码实现xml.etree.ElementTree 目的 对一个文件夹中全部Labelimg标记的xml文件中的文件路径以及文件夹名,使用python... -
批量查找修改xml文件内容并更改名称
2020-11-26 22:16:07本文针对批量修改代码进行记录,很简单,删掉了针对项目的主要内容。 导入文件 首先将文件夹中的所有文件存到数字中: def file_list(path): # 传入存储的list f_list = os.listdir(path) # 将文件按首字母进行... -
.net 获取xml里面的值_python批量修改xml某些内容和属性
2020-11-27 02:28:43例如,需要把xml文件中的图像后缀名“.jpg”批量去掉,这时候就需要批量修改Xml中的<filename>属性了。比如:修改之前的文件:修改后:import os import os.path import xml.dom.minidom path="E:pyth... -
python解析xml读取指定属性_python批量修改xml某些内容和属性
2020-12-04 03:02:21例如,需要把xml文件中的图像后缀名“.jpg”批量去掉,这时候就需要批量修改Xml中的属性了。比如:修改之前的文件:修改后:import osimport os.pathimport xml.dom.minidompath="E:\python_summary\image_ano\Ano".... -
使用python批量修改图像尺寸、文件名称、xml文件内容、生成无标记xml文件!
2019-04-29 10:48:19深度学习中经常需要训练无标记的负样本,用于降低目标检测中的误检率、误识别率。生成负样本xml文件的一...此外本博客还包含了如何批量修改图像尺寸、文件名称、xml文件内容,这些也经常用到,代码如下,大家可以适... -
Python修改xml文件内容
2019-08-26 16:50:43在使用xml文件的过程中,发现其中filename的名字有问题,所以找了一个代码修改了这个文件。 ... import xml.etree.ElementTree as ET import os ...# 批量修改整个文件夹所有的xml文件 def change_all_xml...