栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

数据标签处理:python将xml文件转换为txt,csv格式

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据标签处理:python将xml文件转换为txt,csv格式

数据标签处理:python将xml文件转换为txt,csv格式

这里的标注文件为点标注文件

每次要用数据处理脚本的时候都忘记放哪里了,然后重写了一遍又一遍,虽然代码不长,但是每次都有重新写还是很麻烦,这次深深的记录一下,最扎心的事莫过于刚写完的代码不小心删了。。。

一、xml—txt
from xml.dom.minidom import parse
import os

#将xml格式的点标注文件转换为txt格式
# (可以一个xml文件里面包含所有的图片标注信息,也可以一个xml对应1张图片的标签信息)

#将每一个xml文件转换为txt格式:(x,y)
def convert_annotation(xmlfilepath,txtpath):
   
        in_file = open(xmlfilepath, encoding='utf-8')
        
        tree = parse(in_file)
        root = tree.documentElement

        # 获取所有images
        images = root.getElementsByTagName("image")
        for image in images:
            imgname = image.getAttribute("name").split(".")[0]
            out_file = open(txtpath+"\"+'%s.txt' % (imgname), 'a', encoding='utf-8')  # 生成txt格式文件
            points = image.getElementsByTagName("points")
            for point in points:
                if point.hasAttribute("points"):
                    point = str(point.getAttribute("points"))
                    x = point.split(",")[0]
                    y = point.split(",")[1]
                    out_file.write(x+" "+y+ 'n')
            out_file.close()

if __name__ == '__main__':
    #xml文件夹
    xmlpath = r'C:UsersOwenDesktopxml'
    #txt文件夹
    txtpath = r'C:UsersOwenDesktoptxt'
    #读取xml文件夹下的所有xml文件
    filelist = os.listdir(xmlpath)
    for files in filelist:
        #获取每一个xml文件名
        xmlfilepath = xmlpath+ "\"+files
        #将每一个xml文件转换为txt
        convert_annotation(xmlfilepath,txtpath)
二、txt—csv
import csv
import os

#将txt文件转换为csv文件
if __name__ == '__main__':
    #txt文件夹的路径
    txtpath = r'C:UsersOwenDesktoptxt'

    #获取所有的txt文件
    filetxts = os.listdir(txtpath)

    for filetxt in filetxts:
        if filetxt.split(".")[1]!="txt":
            continue
        csvFile = open(txtpath+"\"+filetxt.split(".")[0]+".csv",'w',newline='',encoding='utf-8') # 固定格式
        writer = csv.writer(csvFile) 
        f = open(txtpath+"\"+filetxt,"r")
        for line in f.readlines():
            line = line.strip()
            writer.writerow([float(line.split(' ')[0]),float(line.split(' ')[1])])
        csvFile.close()

常见的点标注文件为.mat格式,通常用:

data = scio.loadmat(mat_filename)#读出来的是字典

转成字典后进行处理,如果我们没有mat文件,可用直接读取csv文件,并创建字典格式:

data = np.loadtxt(csv_filename,delimiter=',')
datamat = {'annPoints':data}

注意:如果直接用txt文件进行读取,会报错

data = np.loadtxt(txt_filename,delimiter=','),

因为坐标都是str格式的,所以要转为csv格式。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1029542.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号