Python指定されたファイルからXMLを生成する方法
プロジェクトは指定されたフォーマットのファイルからXML表示ファイルを作成する必要がありますので、LabelImgを使用して開いて編集と閲覧ができます。元のファイルはコンマで区切られています。
の第1の値:オリジナル画像中の小さなファイルをカットし、AIpng_xでは、xは元のピクチャのいくつかのカットファイル を表す。第2~5の値:それぞれymin、xmin、ymax、xmax に対応する。第6の値:対応するラベル表示を表す。
_; 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_フォーマットcompless
XMLコードオンラインフォーマット美化ツール:
http://tools.jb51.net/code/xmlcodeformat
PythonのXML生成に関する内容に興味がある読者は、このサイトのテーマを見ることができます。
以上はPythonが指定されたファイルからXMLを生成する方法の詳細です。Pythonについて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:
{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="
", addindent="\t", encoding=fileEncoding)
except Exception as ex:
MyLogger().error(f"OperateXML:Save xml error
{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_フォーマットcompless
XMLコードオンラインフォーマット美化ツール:
http://tools.jb51.net/code/xmlcodeformat
PythonのXML生成に関する内容に興味がある読者は、このサイトのテーマを見ることができます。
以上はPythonが指定されたファイルからXMLを生成する方法の詳細です。PythonについてXMLを生成する資料は他の関連記事に注目してください。