Python批量修改、删除、替换xml文件内容(labelimg标注)

这篇具有很好参考价值的文章主要介绍了Python批量修改、删除、替换xml文件内容(labelimg标注)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

使用模型训练自定义数据集之前,在用在网上搜索得到的图片制作数据集时,即使批量修改图片名称后,在使用labelimg标注得到的xml文件中,图片名称还是网络上图片原本的名称,这时需要对其进行批量修改。

<annotation>
	<folder>测试图片</folder>
	<filename>ae2f50b6a937df1e1a72f9bcc45b172d.jpg</filename>
	<path>F:\项目图像数据集\ae2f50b6a937df1e1a72f9bcc45b172d.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>800</width>
		<height>800</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>class1</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>631</xmin>
			<ymin>275</ymin>
			<xmax>714</xmax>
			<ymax>509</ymax>
		</bndbox>
	</object>
</annotation>

然后先修改路径,将xml文件对应图片的真实路径替换。这里图片的名称是采用12位数字排序的。

import xml.dom.minidom
import os

path = r'D:\test\xmltest\xml_source'  # xml文件存放路径
sv_path = r'D:\test\xmltest\xml_save'  # 修改后的xml文件存放路径
files = os.listdir(path)
cnt = 0

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名字及相关属性值
    for i in item:
        i.firstChild.data = f'D:/test/xmltest/xml_source/' + str(cnt).zfill(12) + '.jpg'  # xml文件对应的图片路径

    with open(os.path.join(sv_path, xmlFile), 'w', encoding='utf-8') as fh:
        dom.writexml(fh)
    cnt += 1

修改后变成这样。

<?xml version="1.0" ?><annotation>
	<folder>测试图片</folder>
	<filename>ae2f50b6a937df1e1a72f9bcc45b172d.jpg</filename>
	<path>D:/test/xmltest/JPEGimage/000000000000.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>800</width>
		<height>800</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>class1</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>631</xmin>
			<ymin>275</ymin>
			<xmax>714</xmax>
			<ymax>509</ymax>
		</bndbox>
	</object>
</annotation>

接下来修改图片名称。

import xml.dom.minidom
import os

path = r'D:\test\xmltest\xml_source'  # xml文件存放路径
sv_path = r'D:\test\xmltest\xml_save'  # 修改后的xml文件存放路径
files = os.listdir(path)

for xmlFile in files:
    dom = xml.dom.minidom.parse(os.path.join(path, xmlFile))  # 打开xml文件,送到dom解析
    root = dom.documentElement  # 得到文档元素对象
    names = root.getElementsByTagName('filename')
    a, b = os.path.splitext(xmlFile)  # 分离出文件名a
    for n in names:
        n.firstChild.data = a + '.jpg'
    with open(os.path.join(sv_path, xmlFile), 'w', encoding='utf-8') as fh:
        dom.writexml(fh)

xml文件中的图片名称和已经修改好了。

<?xml version="1.0" ?><annotation>
	<folder>测试图片</folder>
	<filename>000000000000.jpg</filename>
	<path>D:/test/xmltest/JPEGimage/000000000000.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>800</width>
		<height>800</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>class1</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>631</xmin>
			<ymin>275</ymin>
			<xmax>714</xmax>
			<ymax>509</ymax>
		</bndbox>
	</object>
</annotation>

得到的xml文件会显示版本号,如果直接用xml文件训练可能会报错,所以还需删除<?xml version="1.0" ?>。如果需要删除或者替换其他属性,也可在此修改。

# -*- coding:utf-8 -*-

# 将a替换成b

import os

xmldir = r'D:\test\xmltest\xml_source'
savedir = r'D:\test\xmltest\xml_save'
xmllist = os.listdir(xmldir)
for xml in xmllist:
    if '.xml' in xml:
        fo = open(savedir + '/' + '{}'.format(xml), 'w', encoding='utf-8')
        print('{}'.format(xml))
        fi = open(xmldir + '/' + '{}'.format(xml), 'r', encoding='utf-8')
        content = fi.readlines()
        for line in content:
            # line = line.replace('a', 'b')        # 例:将a替换为b
            line = line.replace('<?xml version="1.0" ?>', '')
            line = line.replace('<folder>测试图片</folder>', '<folder>车辆图片</folder>')
            line = line.replace('<name>class1</name>', '<name>class2</name>')
            fo.write(line)
        fo.close()
        print('替换成功')

# 如通b为空字符串,就是删除

大功告成。

<annotation>
	<folder>车辆图片</folder>
	<filename>000000000000.jpg</filename>
	<path>D:/test/xmltest/JPEGimage/000000000000.jpg</path>
	<source>
		<database>Unknown</database>
	</source>
	<size>
		<width>800</width>
		<height>800</height>
		<depth>3</depth>
	</size>
	<segmented>0</segmented>
	<object>
		<name>class2</name>
		<pose>Unspecified</pose>
		<truncated>0</truncated>
		<difficult>0</difficult>
		<bndbox>
			<xmin>631</xmin>
			<ymin>275</ymin>
			<xmax>714</xmax>
			<ymax>509</ymax>
		</bndbox>
	</object>
</annotation>

参考代码

python批量修改xml文件的属性(filename/path) - 代码先锋网python批量修改xml文件的属性(filename/path),代码先锋网,一个为软件开发程序员提供代码片段和技术文章聚合的网站。https://www.codeleading.com/article/67672212062/Python: 文件夹下xml内容批量替换、删除_南石北岸生的博客-CSDN博客_python替换xml 内容 功能:对文件夹下的所有xml进行批量替换或删除。#-*- coding:utf-8 -*-#将a替换成bimport osxmldir=''savedir=''xmllist=os.listdir(xmldir)for xml in xmllist: if '.xml' in xml: fo=open(savedir+'/'+'new_{}'.for...https://blog.csdn.net/gusui7202/article/details/85194806文章来源地址https://www.toymoban.com/news/detail-414349.html

到了这里,关于Python批量修改、删除、替换xml文件内容(labelimg标注)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【mybatis】mapper.xml中foreach的用法,含批量查询、插入、修改、删除方法的使用

    一、xml文件中foreach的主要属性 foreach元素的属性主要有 collection,item,index,separator,open,close。 collection: 表示集合,数据源 item :表示集合中的每一个元素 index :用于表示在迭代过程中,每次迭代到的位置 separator :表示在迭代时数据以什么符号作为分隔符 open :表示该语

    2024年02月12日
    浏览(50)
  • linux 再文件夹目录下,批量替换文件名、文件内容字符串

    基本使用命令 具体使用命令方法 1.替换文件内容 搜索当前目录下所有.DTA文件,并将文件中字符串\\\"string1\\\",替换为\\\"string2\\\" 2.替换文件名 搜索当前目录下所有.DTA文件,并将文件名中字符串\\\"string1\\\"替换为\\\"string2\\\". 3.批量替换文件内容 该目录及子目录下所有文件,将文件中所有的字符

    2024年02月16日
    浏览(57)
  • 批处理批量替换文本内容,用bat代码全篇替换txt文本文件中指定字符信息

    批处理批量全篇替换txt文本文件中指定字符信息,修改三个参数后即可使用,话不多说直接上代码: @echo off setlocal EnableDelayedExpansion set path_str=\\\"C:UsersAdministratorDesktop1.txt\\\" set old_str=需要替换的原文本内容 set new_str=替换后的文本内容 set souerce_path=%path_str% for /f \\\"tokens=1* delims=

    2024年02月11日
    浏览(53)
  • 实用VBA:17.大量word文件中的文本内容进行批量替换

    在工作中可能会遇到需要对大量word文件中的文字内容进行批量替换的情况。相比excel的批量处理,个人感觉word文档中由于包含大量样式信息,批处理时总感觉有顾虑。一者担心影响了文档的格式,误修改了文档的样式,那后果……整过文档的小伙伴都懂的;二者担心批处理不

    2024年01月25日
    浏览(40)
  • Ansible批量操作(上传文件、删除文件&指定文件内容、执行sh文件等)

    官方网站 https://www.ansible.com/ 一、Ansible 简介 1、Ansible是新出现的自动化运维工具,完全基于Python开发,集合了众多运维工具(puppet、chef、func、fabric)的优点,实现了批量系统配置、批量程序部署、批量运行命令等功能。 2、Ansible是基于 paramiko 开发的,并且基于模块化工作,

    2024年04月16日
    浏览(51)
  • python批量处理修改pdf内容

      将PDF转换为Word: 使用pdf2docx库中的Converter类来进行PDF转换。 convert_pdf_to_docx 函数接受PDF文件路径和输出的Word文档路径作为参数。 通过调用Converter对象的 convert 方法将PDF转换为Docx格式。 最后调用 close 方法关闭Converter对象并保存转换后的文档。 将Word转换为Excel: 使用docx库

    2024年01月25日
    浏览(59)
  • 如何批量修改删除html文件中的标签属性

    最近工作中遇到一个问题,一份html文档因为内容里面的样式标签过多导致文件整体过大。 这些描述标签不是必须的,现在需要优化删除掉这些标签从而减小文件体积。 对于这种批量修改删除的任务,我们首先想到的就是使用编辑器处理。 编辑html文档,我使用的是VS Code,它

    2024年02月01日
    浏览(62)
  • 常用脚本-持续更新(文件重命名、视频抽帧、拆帧、删除冗余文件、yolo2xml、转换图片格式、修改xml)

    所有代码位置 :Learning-Notebook-Codes/Python/常用脚本 脚本路径: codes/files_rename.py 脚本说明:可以自动重命名某个文件夹下指定类型的文件。 修改前文件名称: img1.jpg 修改后文件名称: Le0v1n-20231123-X-0001.jpg 脚本路径: codes/extract_frames.py 脚本说明:根据帧间隔对某个文件夹下指定

    2024年02月20日
    浏览(50)
  • labelimg标注的VOC格式标签xml文件和yolo格式标签txt文件相互转换

    目录 1 labelimg标注VOC格式和yolo格式介绍 1.1 voc格式 1.2 yolo数据格式介绍 2 voc格式数据和yolo格式数据相互转换 2.1 voc转yolo代码 2.2 yolo转voc格式代码          labelimg标注工具怎么安装和使用在我的博客中已经讲解了,有需要可以看看,博客。         VOC格式文件保存在和图像名

    2024年02月02日
    浏览(50)
  • notepad++ 批量替换删除指定字符之后 或者 之前的字符,Notepad+批量替换使用大全

    资源宝分享:www.httple.net 注意: 不支持多行表达式 (involving n, r, etc). 1 基本表达式 符号 解释 . 匹配任意字符,除了新一行(n)。也就是说 “.”可以匹配 r ,当文件中同时含有r and n时,会引起混乱。要匹配所有的字符,使用sS。 (…) 这个匹配一个标签区域. 这个标签可以被

    2024年02月07日
    浏览(56)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包