python 提取批量xml文件中的坐标信息存入txt文件 xml文件转txt文件

读取多个xml文件中的坐标信息:xmin、xmax、ymin、ymax(实际为一个矩形框的坐标值),并通过简单的计算得到矩形框的长、宽,最后按照自己的需求读入到一个txt文档中

xml文件目录及文件如下:

python 提取批量xml文件中的坐标信息存入txt文件 xml文件转txt文件_第1张图片

 

python 提取批量xml文件中的坐标信息存入txt文件 xml文件转txt文件_第2张图片

下面是代码实现

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)

 

你可能感兴趣的:(python)