数据标签处理:python将xml文件转换为txt,csv格式
这里的标注文件为点标注文件
每次要用数据处理脚本的时候都忘记放哪里了,然后重写了一遍又一遍,虽然代码不长,但是每次都有重新写还是很麻烦,这次深深的记录一下,最扎心的事莫过于刚写完的代码不小心删了。。。
一、xml—txt
from xml.dom.minidom import parseimport 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# 获取所有imagesimages = 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:\Users\Owen\Desktop\xml'#txt文件夹txtpath = r'C:\Users\Owen\Desktop\txt'#读取xml文件夹下的所有xml文件filelist = os.listdir(xmlpath)for files in filelist:#获取每一个xml文件名xmlfilepath = xmlpath+ "\\"+files#将每一个xml文件转换为txtconvert_annotation(xmlfilepath,txtpath)
二、txt—csv
import csvimport os#将txt文件转换为csv文件if __name__ == '__main__':#txt文件夹的路径txtpath = r'C:\Users\Owen\Desktop\txt'#获取所有的txt文件filetxts = os.listdir(txtpath)for filetxt in filetxts:if filetxt.split(".")[1]!="txt":continuecsvFile = 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格式。