python读xml文件生成头文件_Python根据指定文件生成XML的方法
因项目需要根据指定格式的文件生成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的方法相关推荐
- python 获取文件夹名称大全_python 获取指定文件夹下所有文件名称并写入列表的实例...
如下所示: import os import os.path rootdir = "./pic_data" file_object = open('train_list.txt', ...
- python读excel表格数据绘制图表_Python读取Excel数据生成图表 v2.0
原博文 2020-06-15 15:09 − ## Python读取Excel数据生成图表 v2.0 ## 一.需求背景 自己一直在做一个周基金定投模拟,每周需要添加一行数据,并生成图表.以前一直是用 ...
- python查找指定文件夹并重命名_python获取指定文件夹下的所有文件名,并删选指定类型文件进行重命名以及撤销重命名...
1.加载包 import os 2.定义函数:获取文件夹file_dir下指定类型file_type的所有文件名 def file_name(file_dir,file_type=''):#默认为文件 ...
- python找到文件夹下指定文件类型_python 读取指定文件夹中的指定文件类型的文件名...
C# 读取指定文件夹中的全部文件,并按规则生成SQL语句! 本实例的目的在于: 1 了解怎样遍历指定文件夹中的全部文件 2 控制台怎样输入和输出数据 代码: using System; using S ...
- pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存
pyaudio:基于pyaudio利用Python编程从电脑端录制音频保存到指定文件夹+将录音上传服务器+录音进行识别并转为文本保存 目录 输出结果 代码实现 输出结果 代码实现 # -*- codi ...
- python 执行命令并获取命令行输出_Python实现获取命令行输出结果的方法
Python实现获取命令行输出结果的方法 本文实例讲述了Python实现获取命令行输出结果的方法.分享给大家供大家参考,具体如下: Python获取命令行输出结果,并对结果进行过滤找到自己需要的! 这 ...
- Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作
Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作 目录 Github 之删除文件或者文件夹(不影响本地文件,只删除远端的指定文件或者文件夹) 操作 一.简单介 ...
- python生成xml文件工具_Python根据指定文件生成XML的方法
因项目需要根据指定格式的文件生成XML标注文件,可以方便使用LabelImg打开进行编辑和查看.其原始文件默认使用逗号进行分隔,如下所示: 第1个值:原始图片中切图小文件,以AIpng_x,其中x代表 ...
- python运行系统找不到指定文件_系统找不到指定文件_系统找不到指定的文件_python 系统找不到指定的文件 - 云+社区 - 腾讯云...
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 我正在构建一个依赖于另一个库的特定库,当我这样做时,我收到以下警告消息:&quo ...
最新文章
- linux系统怎么查找 文件是否存在,在Linux上,如何知道一个可执行文件是否包含调试信息呢?...
- 佛祖保佑 永无bug
- linux c 消息队列简介
- ES5-Array-valueOf/toString
- 将ListT集合用DataGridView展示
- php三个数字比较大小排序,php中常用的4种实现数字大小排序的冒泡选择等算法函数代码...
- 链表中是否存在环的问题,及环入口在链表中位置(Linked List Cycle II)
- 【转】ubuntu 11.10(32位系统)下编译android源码
- CodeForces-1058B B. Vasya and Cornfield
- MySQL5.6之Index Condition Pushdown(ICP,索引条件下推)
- 每日一题丨2020.05.27
- MVC中某个页面不需要引用母版页的正确写法
- 《人月神话》读后感一
- mvc crud_Spring MVC Hibernate MySQL集成CRUD示例教程
- 知识图谱实现公安情报分析(人工智能系列)
- Python代码自动转成C++代码
- 游戏音效是用什么软件制作的?
- 服务器一装2008r2系统就蓝屏,服务器安装2008r2后蓝屏
- 7个实用的Python自动化代码,技术改变生活,不再重复
- b站服务器崩溃大会员自动续费,[财经]B站因服务器故障赠送用户1天大会员!回应补偿会自动续费会退款 - 南方财富网...
热门文章
- 中国银行业100强发布,头部名企为何选择永洪科技?
- 泡泡玛特,走出“盲盒”?
- 百雀羚、林清轩、逐本走红背后,植物基护肤品的春天来了?
- 提交mysql代码_MySQL源码之两阶段提交
- 16位灰度数据成像_16位 250M双通道PCI数据采集卡 FCFR-PCI9808
- 哈罗单车怎么关锁还车_街头现新版哈罗单车,细数6大变化,你觉得怎么样?...
- ajax 示例代码,Ajax的简单实用实例代码
- 从0开始利用宝塔linux面板+WordPress一键部署搭建个人的博客介绍
- Python基础入门:反射
- 学习Python一定要会的4个高阶函数