批量修改VOC数据集中xml标签文件的标签名称

第一版:每次都只单一xml文件中的内容进行修改,较为麻烦

import os
import xml.etree.ElementTree as ET#程序功能:批量修改VOC数据集中xml标签文件的标签名称
def changelabelname(inputpath):listdir = os.listdir(inputpath)for file in listdir:if file.endswith('xml'):file = os.path.join(inputpath,file)tree = ET.parse(file)root = tree.getroot()for object1 in root.findall('object'):for sku in object1.findall('name'):           #查找需要修改的名称if (sku.text == 'mos'):               #‘preName’为修改前的名称sku.text = 'mosquitto'                 #‘TESTNAME’为修改后的名称tree.write(file,encoding='utf-8')     #写进原始的xml文件并避免原始xml中文字符乱码else:passelse:passdef changelabelfilename(inputpath):listdir = os.listdir(inputpath)print('11')for file in listdir:if file.endswith('xml'):file = os.path.join(inputpath,file)tree = ET.parse(file)root = tree.getroot()#print('22')for ss in root.findall('filename'):           #查找需要修改的名称#print(str(ss.text))ss1 = ss.text.split('.')ss2 = ss1[1]ss3 = ss1[0]#print(ss2)if (ss2 == 'png'):               #‘preName’为修改前的名称#‘TESTNAME’为修改后的名称ss.text = ss3+'.jpg'tree.write(file, encoding='utf-8')  # 写进原始的xml文件并避免原始xml中文字符乱码# with open('C:\\Users\\luchenxun\\Desktop\\Annotations\\filename','w')as f1:#     f1.write(ss)#     print(ss)else:passelse:passdef changepath(inputpath):listdir = os.listdir(inputpath)for file in listdir:if file.endswith('xml'):file = os.path.join(inputpath, file)tree = ET.parse(file)root = tree.getroot()#for object1 in root.findall('annotation verified="yes"'):for sa in root.findall('path'):  # 查找需要修改的名称sa1 = sa.text.split('.')sa2 = sa1[1]sa3 = sa1[0]if (sa2 == 'png'):  # ‘preName’为修改前的名称#sa2.text = 'jpg'   ‘TESTNAME’为修改后的名称sa.text = sa3+'.jpg'tree.write(file, encoding='utf-8')  # 写进原始的xml文件并避免原始xml中文字符乱码else:passelse:passif __name__ == '__main__':inputpath = 'C:\\Users\\luchenxun\\Desktop\\Annotations'  #此处替换为自己的路径,双斜线changelabelname(inputpath)changelabelfilename(inputpath)changepath(inputpath)

第二版:将功能封装为一个函数,一次性实现xml文件中3个内容的修改

class BatchRename_xml():#批量重命名文件夹中的xml文件名def __init__(self):self.path = 'C:\\Users\\luchenxun\\data_7.5\\Annotations1'  #表示需要命名处理的文件夹self.save_path = 'C:\\Users\\luchenxun\\data_7.5\\Annotations2'#保存重命名后的图片地址self.jpg_path = 'C:\\Users\\luchenxun\\data_7.5\\JPEGImages1'self.jpg_path1 = 'C:\\Users\\luchenxun\\data_7.5\\JPEGImages2'def rename(self):if not os.path.exists(self.save_path):os.mkdir(self.save_path)else:shutil.rmtree(self.save_path)os.mkdir(self.save_path)filelist = os.listdir(self.path) #获取文件路径jfilelist = os.listdir(self.jpg_path)total_num = len(filelist) #获取文件长度(个数)i = 1  #表示文件的命名是从1开始的for item in filelist:if item.endswith('.xml'):  #初始的图片的格式为jpg格式的(或者源文件是png格式及其他格式,后面的转换格式就可以调整为自己需要的格式即可)src = os.path.join(os.path.abspath(self.path), item)#当前文件中图片的地址dst = os.path.join(os.path.abspath(self.save_path), ''+str(i) + '.xml')#处理后文件的地址和名称,可以自己按照自己的要求改进file = os.path.join(self.path, item)tree = ET.parse(file)root = tree.getroot()for file_name in root.findall('filename'):  # 查找需要修改的名称for path_name in root.findall('path'):for jpg_name in jfilelist:ss2 = file_name.text.split('.')[1]sa2 = path_name.text.split('.')[-1]if (sa2 == 'jpg'):path_name.text = 'C:/Users/luchenxun/data_7.5/JPEGImages/' + '' + str(i) + '.jpg'tree.write(file, encoding='utf-8')  # 写进原始的xml文件并避免原始xml中文字符乱码if (ss2 == 'jpg'):file_name.text = '' + str(i) + '.jpg'#print(file_name)tree.write(file, encoding='utf-8')  # 写进原始的xml文件并避免原始xml中文字符乱码if jpg_name.endswith('.jpg'):Old = os.path.join(os.path.abspath(self.jpg_path), jpg_name)New = os.path.join(os.path.abspath(self.jpg_path), '' + str(i) + '.jpg')try:os.rename(src, dst)os.rename(Old, New)#print ('converting %s to %s ...' % (src, dst))if i < total_num:i = i + 1except:continueif __name__ == '__main__':inputpath = 'C:\\Users\\luchenxun\\data_7.5\\Annotations2\\' #此处替换为自己的路径,双斜线#changelabelfilename(inputpath)#listfiles(inputpath)'''demo = BatchRename_jpg()demo.rename()'''demo = BatchRename_xml()demo.rename_xml()

将XML文件中的内容批量修改相关推荐

  1. CorelDRAW VBA - 读取XML文件,根据内容批量创建图形

    目的 这篇教程将教会你如何使用 CorelDRAW VBA 来读取 XML 文件,并通过读取的内容来动态创建指定宽度和高度的矩形. 准备一个XML文件 打开记事本,粘贴以下内容,然后保存文件,文件名输 ...

  2. java 更改excel文件名称_根据Excel文件中的内容,修改指定文件夹下的文件名称

    问题:根据Excel文件中内容,把文件名称由第2列,改为第1列.比如:把文件"123.jpg"修改为"1.jpg". aaarticlea/png;base64 ...

  3. 批量xml文件中的字符串替换

    替换批量xml文件中的内容 替换批量xml文件中的内容 1.实现代码 替换批量xml文件中的内容 1.实现代码 package testpackage;import java.io.BufferedR ...

  4. 修改PDF文件中的内容需要用到什么软件

    PDF文件中的内容可以修改吗?怎么才能修改呢?需要用到什么软件? 日常办公用到的PDF格式的文件比较多,你是否也有以上的疑问?对于PDF文档除了打开查看外,使用最多的还得是修改. 关于如何修改PDF以 ...

  5. xml文件拆分 python_用Python提取合并由集搜客爬取的多个xml文件中的数据 | 向死而生...

    为了爬点小数据同时试用了八爪鱼和集搜客.两者都有免费版本,但八爪鱼数据导出需要积分,集搜客可以不用积分.不过八爪鱼导出的数据有多种格式可选,而集搜客如果不用积分就只能得到一堆xml文件.本着能省则省的 ...

  6. Android Studio中src/main/res/values中strings.xml文件中字符串使用

    strings.xml文件中的内容 在活动中获得字符串的方式: str = getResources().getString(R.string.app_name); 在xml布局文件中引用该字符串: ...

  7. shell 批量修改多个文件中的内容

    文章目录 前言 场景 ==备注== 最新脚本 操作如下 思路: 第一个版本: 第二版本: 参考文献 小结 前言 现在会议很多都是双盲评,然而又需要上传材料/实验结果,这时候需要把材料中和自己名字相关的 ...

  8. python解析xml读取指定属性_python批量修改xml某些内容和属性

    在训练时,有时候需要将jpg格式转换为png格式,顺便也要把jpg标注的xml文件转换为png的xml文件.例如,需要把xml文件中的图像后缀名".jpg"批量去掉,这时候就需要批 ...

  9. 精通LINQ--11.4.3 修改XML文件中的元素

    原文地址:https://blog.csdn.net/linqmail/article/details/2341575 使用LINQ to XML还可以修改XML文件中的元素.下面的实例代码使用LIN ...

最新文章

  1. eclipse发布web项目到生产环境的方式汇总(tomcat)
  2. mysql union 后 sum_mysql:多表查询
  3. 两段用来启动/重启Linux下Tomcat的Perl脚本
  4. div滚动到指定位置 vue_【Vue 进阶】从 slot 到无渲染组件
  5. caffe源码c++学习笔记
  6. 华为实验台ENSP安装与使用
  7. javafx 遮罩_JavaFX技巧31:遮罩/剪切/ Alpha通道
  8. 报错curl: (7) Failed to connect to 127.0.0.1 port xxxx: Connection refused
  9. table超出边框出现滚动条_精美横轴智能滚动条设计
  10. WPF案例 (五) 对控件界面使用倒影
  11. Android核心分析之二十五Android GDI之共享缓冲区机制
  12. wpf Content数据绑定StringFormat起作用的原理和解决(转)
  13. Win2008首次使用关闭的安全选项
  14. vue自定义一个视频播放器
  15. jvisualVM调优案例
  16. 在Vue中使用video.js播放器组件(vue-video-player)
  17. 手把手教会你视频转文字怎么操作,快来get
  18. vue 阻止事件冒泡和捕获
  19. java实现发送电子邀请函_电子邀请函的发展会怎样?
  20. 根据ppt模板修改ppt内容

热门文章

  1. Android Studio中配置Genymotion模拟器
  2. python怎么识别log函数_log函数图像_函数图像_python函数图像 - 云+社区 - 腾讯云
  3. 解决Ubuntu中vi命令的编辑模式下不能正常使用方向键和退格键的问题
  4. 资源分享 | 仅需一个微软账号即可每天白嫖两小时Microsoft学习实验虚拟机云电脑...
  5. 代码重构之路 --我的2022年总结
  6. 拆解康柏321电池之电池串并联容量计算
  7. cmd的如何打开、运行?(1)
  8. 游戏数值策划属性篇(一):关于属性设计的几点思考
  9. linux 安装无界面系统,linux系统安装异常,无法进入GUI安装界面 - 量子化学 - 小木虫 - 学术 科研 互动社区...
  10. 如何开启浏览器硬件加速