python批量修改xml文件中的信息
作者:vodka、 发布时间:2022-03-29 22:50:53
标签:python,修改,xml
项目场景:
在做目标检测时,重新进行标注会耗费大量的时间,如果能够批量对xml中的信息进行修改,那么将会节省大量的时间,接下来将详细介绍如何修改标注文件xml中的相关信息。
问题描述:
例如:当我有一批标注好的xml文件,文件格式如下图所示 :
<?xml version='1.0' encoding='us-ascii'?>
<annotation>
<folder>VOC2012</folder>
<filename>x0y1115.png</filename>
<source>
<database>The VOC2007 Database</database>
<anotation>PASCAL VOC2007</anotation>
<image>flickr</image>
</source>
<size>
<width>2233</width>
<height>2177</height>
<depth>3</depth>
</size>
<segmented>1</segmented>
<object>
<name>[1]</name>
<pose>Unspecified</pose>
<truncated>0</truncated>
<difficult>1</difficult>
<bndbox>
<xmin>0</xmin>
<ymin>1115</ymin>
<xmax>30</xmax>
<ymax>1145</ymax>
</bndbox>
</object>
</annotation>
}
分析:
可以发现整个标注文件的层级是按照annotation------folder/filename/…/object------name/pose/truncated/difficult/bndbox------xmin/ymin/xmax/ymax这样的格式来的。现在我需要修改标注目标的类别信息(将[1]改成lack),其他信息同理可以修改。Python代码如下:
解决方案:
import os
import os.path
from xml.etree.ElementTree import parse, Element
#批量修改xml中内容
def test():
path = "./datasets/Annotations/" # xml文件所在的目录
files = os.listdir(path) # 遍历文件夹下所有文件名称
for xmlFile in files: # 对所有文件进行循环遍历处理
path1 = "./datasets/Annotations/"+xmlFile #定位当前处理的文件的路径
newStr = os.path.join(path, xmlFile)
dom = parse(newStr) # 获取xml文件中的参数
root = dom.getroot() # 获取数据结构
for obj in root.iter('object'): # 获取object节点中的name子节点(此处如果要换成别的比如bndbox)
name = obj.find('name').text # 获取相应的文本信息
# 以下为自定义的修改规则,我这里把文本信息为[1]~[5]的内容改成lack,依次类推
if name in ['[1]','[2]','[3]','[4]','[5]']:
new_name = 'lack'
elif name in ['[6]','[7]','[8]','[9]','[10]']:
new_name = 'black_point'
elif name in ['[11]','[12]','[13]','[14]','[15]']:
new_name = 'crack'
else:
new_name = 'Satellite_InkDrop'
obj.find('name').text = new_name # 修改
dom.write(path1, xml_declaration=True) # 保存到指定文件
pass
if __name__ == '__main__':
test()
来源:https://blog.csdn.net/Vodka_Lou/article/details/122506871
![](https://www.aspxhome.com/images/zang.png)
![](https://www.aspxhome.com/images/jiucuo.png)
猜你喜欢
- 下面是Sql Server 和 Access 操作数据库结构的常用Sql,如如何新建一个表,如何删除表,如何删除数据,插入数据等等..希望对
- 效果: 思路:利用onmousemove事件,然后获取鼠标的坐标,之后把DIV挨个遍历,最后把鼠标的坐标赋给DIV。代码:<
- 前言近期在刷新生产环境数据库的时候,需要更新表中的字段,如果对每条数据结果都执行一次update语句,占用的数据库资源就会很多,而且速度慢。
- 如今,基本每个网站都会需要到Tab切换展示内容的滑动门效果应用,这种效果可以在更少的页面空间内,展示更多的网站内容,节约空间,方便用户集中操
- 利用Python正则表达式匹配字符串中的http链接。主要难点是用正则表示出http 链接的模式。import repattern = re
- 前言本文主要给大家介绍了关于python计算时间差(返回天数)的相关资料,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧方法
- 1. 需要用到的Python库pygametkinter2. 简易UI设计audio_player = Tk()audio_player.t
- 自己做了一个asp页面,用了一个td来显示留言本的最新消息;但是却无法控制其排版问题,因为该td的width确定,但是数据库中的文字却是未知
- 什么是事件代理(Event Delegation)?如果不太了解的朋友,可详细阅读:《Event delegation in JavaScr
- 1、字符串的索引与获取字符串的索引方式与列表的索引方式是一样的。只不过列表是每个元素的自身就有一个索引位置,而字符串是每个字符就有一个索引位
- 本文实例为大家分享了python绘制柱形图的具体代码,供大家参考,具体内容如下#柱形图import pandasimport numpyim
- 目录一个不那么方便的解决方案:实战演练网站在线转换Postman今天介绍个神奇的网站!堪称爬虫偷懒的神器!我们在写爬虫,构建网络请求的时候,
- 最近,需要对日志文件进行实时数据处理。一、简单的实时文件处理(单一文件)假设我们要实时读取的日志的路径为: /data/mongodb/sh
- PHP chr() 函数实例从不同 ASCII 值返回字符:<?php echo chr(52) . "<br>
- 用 docx 模块读取 Worddocx 安装cmd 中输入pip install python-docx 即可安装 docx 模块docx
- 在 Internet 连接无处不在的今天,我们忽然有了另外一个需求,离线 Web。Gmail, Google Reader, Zoho 这些
- 因为函数或类都是对象,它们也能被四处传递。它们又是可变对象,可以被更改。在函数或类对象创建后但绑定到名字前更改之的行为为装饰(decorat
- 外面很多所谓sitemap生成代码都只生成目录文件地址,没生成动态的,我后来自己写了这个,是支持动态的,例子: 如你是文章网站,文章有200
- 本文实例讲述了python中urllib模块用法。分享给大家供大家参考。具体分析如下:一、问题:近期公司项目的需求是根据客户提供的api,我
- 官方网站 : www.python.orgPython is an interpreted, interactive, object-ori