最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python根據(jù)指定文件生成XML的方法

 更新時間:2020年06月29日 09:37:13   作者:Surpassme  
這篇文章主要介紹了Python根據(jù)指定文件生成XML的方法,文中代碼非常詳細,幫助大家更好的理解和學習,感興趣的朋友可以了解下

    因項目需要根據(jù)指定格式的文件生成XML標注文件,可以方便使用LabelImg打開進行編輯和查看。其原始文件默認使用逗號進行分隔,如下所示:

  • 第1個值:原始圖片中切圖小文件,以AIpng_x,其中x代表原始圖片的第幾個切圖文件
  • 第2~5值:分別對應(yīng)于ymin, xmin, ymax, xmax
  • 第6個值:代表對應(yīng)的標簽標注

    在生成XML文件時,需要對其進行匯總,即將屬于同一個原始文件的切圖小文件的標注匯總到一起,其實現(xiàn)代碼如下所示:

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()
          # 創(chuàng)建根節(jié)點
          rootNode = doc.createElement("annotation")
          # 添加根節(jié)點
          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:這里再為大家提供幾款關(guān)于xml操作的在線工具供大家參考使用:

在線XML/JSON互相轉(zhuǎn)換工具:
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

對關(guān)于Python生成XML相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Python操作xml數(shù)據(jù)技巧總結(jié)》

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

相關(guān)文章

  • Python驗證碼識別的方法

    Python驗證碼識別的方法

    這篇文章主要介紹了Python驗證碼識別的方法,涉及Python針對驗證碼圖片的相關(guān)分析與操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 帶你從內(nèi)存的角度看Python中的變量

    帶你從內(nèi)存的角度看Python中的變量

    這篇文章主要為大家介紹了從內(nèi)存的角度看Python中的變量,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python實現(xiàn)3D地圖可視化

    python實現(xiàn)3D地圖可視化

    這篇文章主要為大家詳細介紹了python實現(xiàn)3D地圖可視化,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-03-03
  • pycharm必知的一些簡單設(shè)置方法

    pycharm必知的一些簡單設(shè)置方法

    這篇文章主要介紹了pycharm必知的一些簡單設(shè)置方法,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • python OpenCV實現(xiàn)答題卡識別判卷

    python OpenCV實現(xiàn)答題卡識別判卷

    這篇文章主要為大家詳細介紹了python OpenCV實現(xiàn)答題卡識別判卷,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • Python的互斥鎖與信號量詳解

    Python的互斥鎖與信號量詳解

    這篇文章主要介紹了Python的互斥鎖與信號量詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-09-09
  • Python用摘要算法生成token及檢驗token的示例代碼

    Python用摘要算法生成token及檢驗token的示例代碼

    這篇文章主要介紹了Python用摘要算法生成token及檢驗token的示例代碼,幫助大家更好的理解和學習python,感興趣的朋友可以了解下
    2020-12-12
  • python 使用shutil復制圖片的例子

    python 使用shutil復制圖片的例子

    今天小編就為大家分享一篇python 使用shutil復制圖片的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 淺談Pycharm最有必要改的幾個默認設(shè)置項

    淺談Pycharm最有必要改的幾個默認設(shè)置項

    今天小編就為大家分享一篇淺談Pycharm最有必要改的幾個默認設(shè)置項,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • Pytest 使用簡介

    Pytest 使用簡介

    這篇文章主要介紹了Pytest 使用簡介,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-04-04

最新評論

五常市| 安远县| 喀喇| 恭城| 章丘市| 蒲城县| 赤城县| 邹平县| 南岸区| 余庆县| 贞丰县| 乌什县| 连南| 桃江县| 田阳县| 师宗县| 砚山县| 怀柔区| 星座| 台北县| 赫章县| 浦东新区| 江山市| 嘉兴市| 定兴县| 独山县| 云安县| 姜堰市| 白河县| 中方县| 浮山县| 固原市| 余江县| 定南县| 南召县| 台东市| 青州市| 凌源市| 岑溪市| 西和县| 山东省|