读取多个xml文件中的坐标信息:xmin、xmax、ymin、ymax(实际为一个矩形框的坐标值),并通过简单的计算得到矩形框的长、宽,最后按照自己的需求读入到一个txt文档中
xml文件目录及文件如下:
下面是代码实现
import os
import sys
import xml.etree.ElementTree as ET
import glob
def xml_to_txt(indir,outdir):
os.chdir(indir) #用于改变当前工作目录到指定的路径
annotations = os.listdir('.') #返回指定的文件夹包含的文件或文件夹的名字的列表 当前目录下的文件名和文件夹名
annotations = glob.glob(str(annotations)+'*.xml') #匹配所有的符合条件的文件,并将其以list的形式返回
for i, file in enumerate(annotations): #对于一个可迭代的(iterable)/可遍历的对象,enumerate将其组成一个索引序列,利用它可以同时获得索引和值
file_save = file.split('.')[0]+'.txt'
file_txt = os.path.join(outdir, file_save) #连接两个或更多的路径名组件 outdir
f_w = open(outdir, 'a')
# actual parsing
in_file = open(file)
tree = ET.parse(in_file)
root = tree.getroot()
for obj in root.iter('object'):
current = list()
name = obj.find('name').text
xmlbox = obj.find('bndbox')
xn = xmlbox.find('xmin').text
xx1 = xmlbox.find('xmax').text
yn = xmlbox.find('ymin').text
yx1 = xmlbox.find('ymax').text
#根据x,y的最大最小值,计算其所在的矩形框的大小 长 宽
xx = str(int(xx1) - int(xn));
yx = str(int(yx1) - int(yn));
#print xn 输出矩形框的左上角的坐标,及矩形框的长、宽
f_w.write(xn+','+yn+','+xx+','+yx+',\n')
#f_w.write(name.encode("utf-8")+'\n')
indir='F:/project/PycharmProjects/xml/plane/ground1/' #获得所有xml文件目录
outdir = 'F:/project/PycharmProjects/xml/data-txt/plane/ground1.txt'
xml_to_txt(indir, outdir)