日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

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

發布時間:2024/10/12 python 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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操作的在線工具供大家參考使用:

對關于Python生成XML相關內容感興趣的讀者可查看本站專題:《Python操作xml數據技巧總結》

以上就是Python根據指定文件生成XML的方法的詳細內容,更多關于Python生成XML的資料請關注腳本之家其它相關文章!

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的python生成xml文件工具_Python根据指定文件生成XML的方法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。