应用场景:
在深度学习项目中,常常会处理各种数据集。比如已经标注好的数据标签有三类:人形、汽车、猫,有一个新项目,只需要识别人形,那就需要把这个数据集进行处理,删除另外两类的标签。本文拿yolo格式标签为例,如下图所示,我要提取7类中的一类。
python批量处理的脚本如下
思路就是:
1、把需要的行内容拷贝下来
2、把行内容首字符(也就是类别号)修改
3、新建txt文件,把需要的类别行再复制进去
import os
txtpath = r"F:\Driving_data\output" # 原始txt标签存放的文件夹路径
new_txtpath = r"F:\Driving_data\output_new" #处理完后,生成的txt标签存放的文件夹路径
names_txt=os.listdir(txtpath)
#print(names_txt)
for name in names_txt:
filepath = txtpath + "/" + name
filepath_new = new_txtpath + "/" + name
save_line_num = [] #定义一个列表,用于存放txt中我们不需要的类别对应的行号
new_data = [] #用于存放我们需要的类别对应行的内容
out_txt_path = os.path.join(filepath_new + '.txt') #在对应输出文件夹生成新的txt文件
#with open(filepath, "rb") as fp:
file = open(filepath) #打开txt文件
lines = file.readlines() #读取txt文件中每一行
#print(lines)
n = 0
for line in lines:
n += 1
if line.startswith("2") or line.startswith("1") or line.startswith("0"): #筛选我们不需要的类
save_line_num.append(n-1) #把不需要的类对应的行写入save_line_num列表
for l in range(len(lines)): #再遍历原始txt文件中的每一行
if l not in save_line_num:
#print(lines[l])
list_new = lines[l].split(' ') #提取我们需要的类别 对应的内容
temp = int(list_new[0]) #提取行首字符(也就是对应类别号)
if temp == 3:
list_new[0] = '0' #把“3”修改为”0“,因为只有一个类别
list_string = ' '.join(list_new)
print(list_string)
new_data.append(list_string)
file.close()
with open(filepath_new, "a+") as fn:
fn.writelines(new_data) #把需要的行内容写进txt
fn.close