pascalVOC 標註檔案,解析為TXT

2022-06-22 15:27:10 字數 2645 閱讀 3862

首先,讀取所有xml檔案完整路徑,寫入train.txt 文字文件中,

然後讀取txt文件,逐行讀取xml文件,建資料夾,用於儲存解析好的txt,寫入txt時,只需要儲存類別名和座標資訊即可,中間用tab分割

#!/usr/bin/evn python 

# coding:utf-8

import os

import glob

try:

import xml.etree.celementtree as et

except importerror:

import xml.etree.elementtree as et

import sys

# filename = os.listdir('f:/snow leopard/000_image_frame/000_b_xml/')

filename = glob.glob('f:/snow leopard/000_image_frame/000_b_xml/' + '*xml')

fileobject = open('train.txt', 'w')

for ip in filename:

fileobject.write(ip)

fileobject.write('\n')

fileobject.close()

file_srx = open("train.txt") #其中包含所有待計算的檔名

line = file_srx.readline()

while line:

f = line[:-1] # 除去末尾的換行符

tree = et.parse(f) #開啟xml文件

root = tree.getroot() #獲得root節點

print ("*"*10)

filename = root.find('filename').text

filename = filename[:-4]

print (filename)

dir_name = 'f:/snow leopard/data preprocessing/txt'

if os.path.exists(dir_name) == false:

os.mkdir(dir_name)

# file_object_txt = open(dir_name +'/' + filename + ".txt","a")

# # file_object_txt = open(dir_name, 'w') #寫檔案

# file_object_txt.write(filename +'\t')

# file_object_log = open(filename + ".log", 'w') #寫檔案

flag = false

########################################

for size in root.findall('size'): #找到root節點下的size節點

width = size.find('width').text #子節點下節點width的值

height = size.find('height').text #子節點下節點height的值

print (width, height)

########################################

for object in root.findall('object'): #找到root節點下的所有object節點

name = object.find('name').text #子節點下節點name的值

file_object_txt = open(dir_name +'/' + filename + ".txt","a")

# file_object_txt = open(dir_name, 'w') #寫檔案

file_object_txt.write(name +'\t')

print (name)

bndbox = object.find('bndbox') #子節點下屬性bndbox的值

xmin = bndbox.find('xmin').text

ymin = bndbox.find('ymin').text

xmax = bndbox.find('xmax').text

ymax = bndbox.find('ymax').text

file_object_txt.write(xmin+'\t' + ymin + '\t'+ xmax + '\t'+ ymax)

print (xmin, ymin, xmax, ymax)

file_object_txt.close()

# file_object_log.close()

if flag == false: #如果沒有符合條件的資訊,則刪掉相應的txt檔案以及jpg檔案

參考: 

Linux下標註檔案常用的指令碼命令

去除每一行的 windows下的斷元字元 m 每一行 s 替換 g 全部行 gloal 614,s abc cde 從614行到最後行 替換abc為cde 618,s pt pt 從618行到最後行 替換 pt為pt s chars 每行行頭插入chars s archs 每行行尾插入archs c...

coco資料集標註檔案json格式化檢視

ubuntu如何快速格式化json檔案 安裝jq工具 sudo apt get update sudo apt get install jq格式化json檔案輸出到新檔案 cat 檔名 jq newfile.json例子 cat instances val2014.json jq 111.json然...

標註資料解析 xml格式的標註資料解析

xml基本構成 1.標籤 標籤名 ps 起始標籤和結束標籤是成對存在的。且結束標籤多了個 起始標籤 成份訪問 結合 說明 1.構建樹和跟節點 2.獲取子節點 ps 直客獲取名稱相同的直接子節點 find 節點名稱 獲取同名直接子節點 缺點 只能根據提供的名稱獲取第乙個子節點 findall 節點名稱...