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:
    {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を生成する資料は他の関連記事に注目してください。