因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看。其原始文件默认使用逗号进行分隔,如下所示:

第1个值:原始图片中切图小文件,以AIpng_x,其中x代表原始图片的第几个切图文件 第2~5值:分别对应于ymin, xmin, ymax, xmax 第6个值:代表对应的标签标注

在生成XML文件时,需要对其进行汇总,即将属于同一个原始文件的切图小文件的标注汇总到一起,其实现代码如下所示: import os

from Logger import MyLogger

from xml.dom.minidom import Document

from collections import defaultdict

import re

class OpeateXML:

def __init__(self, srcPath: str, targetPath: str, srcFileName: str):

self._srcPath = srcPath

self._targetPath = targetPath

self._srcFileName = srcFileName

def readSrcFileName(self, fileEncoding="utf8") -> dict:

data = defaultdict(list)

s = re.compile("\.AIpng_\d{1,}", re.IGNORECASE)

srcFileFullPath = os.path.join(self._srcPath, self._srcFileName)

try:

with open(srcFileFullPath, mode="r", encoding=fileEncoding, errors="ignore") as fr:

for content in fr.readlines():

data[s.sub(".AIpng",content.strip().split(",")[0])].append(content.strip())

except Exception as ex:

MyLogger().error(f"OperateXML:read file error:\n{ex}")

return {}

else:

# data.sort(key=lambda x: x.strip().split(",")[0])

return data

def createXML(self, data: dict, fileEncoding="utf8"):

if data:

try:

for k,v in data.items():

doc = Document()

# 创建根节点

rootNode = doc.createElement("annotation")

# 添加根节点

doc.appendChild(rootNode)

folder = doc.createElement("folder")

folderText = doc.createTextNode(self._targetPath)

folder.appendChild(folderText)

rootNode.appendChild(folder)

filename = doc.createElement("filename")

filenameText = doc.createTextNode(k)

filename.appendChild(filenameText)

rootNode.appendChild(filename)

path = doc.createElement("path")

pathText = doc.createTextNode(os.path.join(self._targetPath,k))

path.appendChild(pathText)

rootNode.appendChild(path)

for i in v:

tmpData = i.strip().split(",")

if len(tmpData) == 6:

_, ymin, xmin, ymax, xmax, labelName = tmpData

objectObj = doc.createElement("object")

rootNode.appendChild(objectObj)

objectName = doc.createElement("name")

objectNameText = doc.createTextNode(labelName)

objectName.appendChild(objectNameText)

objectObj.appendChild(objectName)

objectBndBox = doc.createElement("bndbox")

objectObj.appendChild(objectBndBox)

objectBndBoxXmin = doc.createElement("xmin")

objectBndBoxYmin = doc.createElement("ymin")

objectBndBoxXmax = doc.createElement("xmax")

objectBndBoxYmax = doc.createElement("ymax")

objectBndBoxXminText = doc.createTextNode(xmin)

objectBndBoxYminText = doc.createTextNode(ymin)

objectBndBoxXmaxText = doc.createTextNode(xmax)

objectBndBoxYmaxText = doc.createTextNode(ymax)

objectBndBox.appendChild(objectBndBoxXmin)

objectBndBox.appendChild(objectBndBoxYmin)

objectBndBox.appendChild(objectBndBoxXmax)

objectBndBox.appendChild(objectBndBoxYmax)

objectBndBoxXmin.appendChild(objectBndBoxXminText)

objectBndBoxYmin.appendChild(objectBndBoxYminText)

objectBndBoxXmax.appendChild(objectBndBoxXmaxText)

objectBndBoxYmax.appendChild(objectBndBoxYmaxText)

objectObj.appendChild(objectBndBox)

else:

continue

# save xml

xmlName=os.path.splitext(k)[0]+".xml"

targetPath = os.path.join(self._targetPath, xmlName)

with open(targetPath, mode="w", encoding=fileEncoding) as fw:

doc.writexml(fw, indent="\t", newl="\n", addindent="\t", encoding=fileEncoding)

except Exception as ex:

MyLogger().error(f"OperateXML:Save xml error\n{ex}")

return

if __name__ == '__main__':

srcPath = r"C:\Users\Surpass\Documents\PycharmProjects\data\TEST-8\outs"

srcName = "locations.txt"

targetPath = r"C:\Users\Surpass\Documents\PycharmProjects\data\TEST-8\outs\in_number"

operateXML = OpeateXML(srcPath, targetPath, srcName)

a = operateXML.readSrcFileName()

operateXML.createXML(a)

最终生成的XML效果如下所示:

在LabelImg中的效果如下所示:

PS:这里再为大家提供几款关于xml操作的在线工具供大家参考使用:

在线XML/json互相转换工具:

http://tools.jb51.net/code/xmljson

在线格式化XML/在线压缩XML:

http://tools.jb51.net/code/xmlformat

XML在线压缩/格式化工具:

http://tools.jb51.net/code/xml_format_compress

XML代码在线格式化美化工具:

http://tools.jb51.net/code/xmlcodeformat

对关于Python生成XML相关内容感兴趣的读者可查看本站专题:《Python操作xml数据技巧总结》

以上就是Python根据指定文件生成XML的方法的详细内容,更多关于Python生成XML的资料请关注聚米学院其它相关文章!

python读xml文件生成头文件_Python根据指定文件生成XML的方法相关推荐

  1. python 获取文件夹名称大全_python 获取指定文件夹下所有文件名称并写入列表的实例...

    如下所示: import os import os.path rootdir = "./pic_data" file_object = open('train_list.txt', ...

  2. python读excel表格数据绘制图表_Python读取Excel数据生成图表 v2.0

    原博文 2020-06-15 15:09 − ## Python读取Excel数据生成图表 v2.0 ## 一.需求背景 自己一直在做一个周基金定投模拟,每周需要添加一行数据,并生成图表.以前一直是用 ...

  3. python查找指定文件夹并重命名_python获取指定文件夹下的所有文件名,并删选指定类型文件进行重命名以及撤销重命名...

    1.加载包 import os 2.定义函数:获取文件夹file_dir下指定类型file_type的所有文件名 def file_name(file_dir,file_type=''):#默认为文件 ...

  4. python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...

    C# 读取指定文件夹中的全部文件,并按规则生成SQL语句! 本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using S ...

  5. pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存

    pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...

  6. python 执行命令并获取命令行输出_Python实现获取命令行输出结果的方法

    Python实现获取命令行输出结果的方法 本文实例讲述了Python实现获取命令行输出结果的方法.分享给大家供大家参考,具体如下: Python获取命令行输出结果,并对结果进行过滤找到自己需要的! 这 ...

  7. Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作

    Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作 目录 Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作 一.简单介 ...

  8. python生成xml文件工具_Python根据指定文件生成XML的方法

    因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...

  9. python运行系统找不到指定文件_系统找不到指定文件_系统找不到指定的文件_python 系统找不到指定的文件 - 云+社区 - 腾讯云...

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在构建一个依赖于另一个库的特定库,当我这样做时,我收到以下警告消息:&quo ...

最新文章

  1. linux系统怎么查找 文件是否存在,在Linux上,如何知道一个可执行文件是否包含调试信息呢?...
  2. 佛祖保佑 永无bug
  3. linux c 消息队列简介
  4. ES5-Array-valueOf/toString
  5. 将ListT集合用DataGridView展示
  6. php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...
  7. 链表中是否存在环的问题,及环入口在链表中位置(Linked List Cycle II)
  8. 【转】ubuntu 11.10(32位系统)下编译android源码
  9. CodeForces-1058B B. Vasya and Cornfield
  10. MySQL5.6之Index Condition Pushdown(ICP,索引条件下推)
  11. 每日一题丨2020.05.27
  12. MVC中某个页面不需要引用母版页的正确写法
  13. 《人月神话》读后感一
  14. mvc crud_Spring MVC Hibernate MySQL集成CRUD示例教程
  15. 知识图谱实现公安情报分析(人工智能系列)
  16. Python代码自动转成C++代码
  17. 游戏音效是用什么软件制作的?
  18. 服务器一装2008r2系统就蓝屏,服务器安装2008r2后蓝屏
  19. 7个实用的Python自动化代码,技术改变生活,不再重复
  20. b站服务器崩溃大会员自动续费,[财经]B站因服务器故障赠送用户1天大会员!回应补偿会自动续费会退款 - 南方财富网...

热门文章

  1. 中国银行业100强发布,头部名企为何选择永洪科技?
  2. 泡泡玛特,走出“盲盒”?
  3. 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
  4. 提交mysql代码_MySQL源码之两阶段提交
  5. 16位灰度数据成像_16位 250M双通道PCI数据采集卡 FCFR-PCI9808
  6. 哈罗单车怎么关锁还车_街头现新版哈罗单车,细数6大变化,你觉得怎么样?...
  7. ajax 示例代码,Ajax的简单实用实例代码
  8. 从0开始利用宝塔linux面板+WordPress一键部署搭建个人的博客介绍
  9. Python基础入门:反射
  10. 学习Python一定要会的4个高阶函数