将YOLOV5数据集不同类别分开的Python脚本
import os
import shutil
labelall_path = r'C:\Users\1\Desktop\test\labels-all' # 所有标签存放的路径
imgall_path = r'C:\Users\1\Desktop\test\images-all' # 所有图片存放的路径
path = labelall_path.split(os.path.basename(labelall_path))[0]
os.chdir(path)
if not os.path.exists('new-images'):
os.makedirs('new-images')
if not os.path.exists('new-labels'):
os.makedirs('new-labels')
img_path = os.path.join(os.getcwd(), 'new-images')
label_path = os.path.join(os.getcwd(), 'new-labels')
if not os.path.exists(os.path.join(path, 'new-images', '0')):
os.makedirs(os.path.join(path, 'new-images', '0'))
if not os.path.exists(os.path.join(path, 'new-images/1')):
os.makedirs(os.path.join(path, 'new-images/1'))
if not os.path.exists(os.path.join(path, 'new-images/2')):
os.makedirs(os.path.join(path, 'new-images/2'))
if not os.path.exists(os.path.join(path, 'new-images/3')):
os.makedirs(os.path.join(path, 'new-images/3'))
if not os.path.exists(os.path.join(path, 'new-images/4')):
os.makedirs(os.path.join(path, 'new-images/4'))
if not os.path.exists(os.path.join(path, 'new-labels/0')):
os.makedirs(os.path.join(path, 'new-labels/0'))
if not os.path.exists(os.path.join(path, 'new-labels/1')):
os.makedirs(os.path.join(path, 'new-labels/1'))
if not os.path.exists(os.path.join(path, 'new-labels/2')):
os.makedirs(os.path.join(path, 'new-labels/2'))
if not os.path.exists(os.path.join(path, 'new-labels/3')):
os.makedirs(os.path.join(path, 'new-labels/3'))
if not os.path.exists(os.path.join(path, 'new-labels/4')):
os.makedirs(os.path.join(path, 'new-labels/4'))
# os.chdir(label_path)
os.chdir(labelall_path)
for i in os.listdir():
if i.endswith('.txt'):
f = open(i, "r")
str = f.read()
f.close()
if str[0] == '0':
shutil.move(i, '../new-labels/0')
elif str[0] == '1':
shutil.move(i, '../new-labels/1')
elif str[0] == '2':
shutil.move(i, '../new-labels/2')
elif str[0] == '3':
shutil.move(i, '../new-labels/3')
elif str[0] == '4':
shutil.move(i, '../new-labels/4')
else:
continue
for i in os.listdir(os.path.join(label_path, '0')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/0') # 标签为0对应的图片存放路径,下同
for i in os.listdir(os.path.join(label_path, '1')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/1')
for i in os.listdir(os.path.join(label_path, '2')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/2')
for i in os.listdir(os.path.join(label_path, '3')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/3')
for i in os.listdir(os.path.join(label_path, '4')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/4')
2021.8.4补充:将含有特定类别标签的txt文件筛选出来
import os
import shutil
# 所有标签存放路径
path = 'C:\\Users\\1\\Desktop\\test' #文件夹中不能有同名文件
os.chdir(path)
# 文件列表
files = []
################ 用于遍历路径下的文件以及文件夹里的文件#############################
for tuples in os.walk(path): # 遍历路径下的文件夹及文件 获得多个元组
path1 = tuples[0] + '\\'
for content in tuples: # 遍历元祖
if type(content) == list:
for file in content: # 遍历元组中的列表
if file.endswith('.txt'): # 将列表中的txt文件提取出来
files.append(path1 + file) # 将txt文件的路径加到files列表中
###############################################################################
################ 用于遍历路径下的文件,文件夹里的文件不操作#####################
# for file in os.listdir(path):
# if file.endswith(".txt"):
# files.append(path + file)
#######################################################################
for file in files:
with open(file, 'r') as f:
content = f.readlines()
for line in content:
if line[0] == '5':
shutil.move(file, './5') # 类别为5的标签存放路径
break
elif line[0] == '6':
shutil.move(file, './6') # 类别为6的标签存放路径
break
2021.9.15:新增需求:将内容含有多行的txt文件以及对应的图片中含有0标签的文件移入0s文件夹中,含有1标签的文件移入1s文件夹中,既含有0有含有1标签的文件放入0s+1s文件夹中,其余的移入multi-objs文件夹。
import os
import shutil
imgall_path = r'C:\Users\1\Desktop\1\test\images-all' # 所有图片存放的路径
labelall_path = r'C:\Users\1\Desktop\1\test\labels-all' # 所有标签存放的路径
path = labelall_path.split(os.path.basename(labelall_path))[0]
os.chdir(path)
# 创建新图片文件夹
if not os.path.exists('new-images'):
os.makedirs('new-images')
# 创建新标签文件夹
if not os.path.exists('new-labels'):
os.makedirs('new-labels')
img_path = os.path.join(os.getcwd(), 'new-images')
label_path = os.path.join(os.getcwd(), 'new-labels')
# 创建新图片文件夹下相应类别文件夹
if not os.path.exists(os.path.join(path, 'new-images', 'empty')):
os.makedirs(os.path.join(path, 'new-images', 'empty'))
if not os.path.exists(os.path.join(path, 'new-images', 'multi-objs/')):
os.makedirs(os.path.join(path, 'new-images', 'multi-objs/'))
if not os.path.exists(os.path.join(path, 'new-images', '0')):
os.makedirs(os.path.join(path, 'new-images', '0'))
if not os.path.exists(os.path.join(path, 'new-images', '0s')):
os.makedirs(os.path.join(path, 'new-images', '0s'))
if not os.path.exists(os.path.join(path, 'new-images/1')):
os.makedirs(os.path.join(path, 'new-images/1'))
if not os.path.exists(os.path.join(path, 'new-images/1s')):
os.makedirs(os.path.join(path, 'new-images/1s'))
if not os.path.exists(os.path.join(path, 'new-images/0s+1s/')):
os.makedirs(os.path.join(path, 'new-images/0s+1s/'))
if not os.path.exists(os.path.join(path, 'new-images/2')):
os.makedirs(os.path.join(path, 'new-images/2'))
if not os.path.exists(os.path.join(path, 'new-images/3')):
os.makedirs(os.path.join(path, 'new-images/3'))
if not os.path.exists(os.path.join(path, 'new-images/4')):
os.makedirs(os.path.join(path, 'new-images/4'))
# 创建新标签文件夹下相应类别文件夹
if not os.path.exists(os.path.join(path, 'new-labels/empty')):
os.makedirs(os.path.join(path, 'new-labels/empty'))
if not os.path.exists(os.path.join(path, 'new-labels/multi-objs/')):
os.makedirs(os.path.join(path, 'new-labels/multi-objs/'))
if not os.path.exists(os.path.join(path, 'new-labels/0')):
os.makedirs(os.path.join(path, 'new-labels/0'))
if not os.path.exists(os.path.join(path, 'new-labels/0s')):
os.makedirs(os.path.join(path, 'new-labels/0s'))
if not os.path.exists(os.path.join(path, 'new-labels/1')):
os.makedirs(os.path.join(path, 'new-labels/1'))
if not os.path.exists(os.path.join(path, 'new-labels/1s')):
os.makedirs(os.path.join(path, 'new-labels/1s'))
if not os.path.exists(os.path.join(path, 'new-labels/0s+1s/')):
os.makedirs(os.path.join(path, 'new-labels/0s+1s/'))
if not os.path.exists(os.path.join(path, 'new-labels/2')):
os.makedirs(os.path.join(path, 'new-labels/2'))
if not os.path.exists(os.path.join(path, 'new-labels/3')):
os.makedirs(os.path.join(path, 'new-labels/3'))
if not os.path.exists(os.path.join(path, 'new-labels/4')):
os.makedirs(os.path.join(path, 'new-labels/4'))
# 移动标签
os.chdir(labelall_path)
for i in os.listdir():
if i.endswith('.txt'):
f = open(i, "r")
str = f.readlines()
f.close()
if len(str) == 0:
shutil.move(i, '../new-labels/empty')
elif len(str) > 1:
flag_0 = False # 标签0 标志位
flag_1 = False # 标签1 标志位
for j in range(len(str)):
if str[j][0] == '1':
flag_1 = True
continue
elif str[j][0] == '0':
flag_0 = True
continue
else:
continue
if ((not flag_0) and (flag_1)):
shutil.move(i, '../new-labels/1s/')
elif ((flag_0) and (not flag_1)):
shutil.move(i, '../new-labels/0s/')
elif ((flag_0) and (flag_1)):
shutil.move(i, '../new-labels/0s+1s/')
else:
shutil.move(i, '../new_labels/multi-objs/')
else:
if str[0][0] == '0':
shutil.move(i, '../new-labels/0')
elif str[0][0] == '1':
shutil.move(i, '../new-labels/1')
elif str[0][0] == '2':
shutil.move(i, '../new-labels/2')
elif str[0][0] == '3':
shutil.move(i, '../new-labels/3')
elif str[0][0] == '4':
shutil.move(i, '../new-labels/4')
else:
continue
# 移动图片
for i in os.listdir(os.path.join(label_path, 'empty')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/empty')
for i in os.listdir(os.path.join(label_path, 'multi-objs/')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/multi-objs/')
for i in os.listdir(os.path.join(label_path, '0')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/0') # 标签为0对应的图片存放路径,下同
for i in os.listdir(os.path.join(label_path, '0s')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/0s')
for i in os.listdir(os.path.join(label_path, '1')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/1')
for i in os.listdir(os.path.join(label_path, '1s')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/1s')
for i in os.listdir(os.path.join(label_path, '0s+1s/')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/0s+1s/')
for i in os.listdir(os.path.join(label_path, '2')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/2')
for i in os.listdir(os.path.join(label_path, '3')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/3')
for i in os.listdir(os.path.join(label_path, '4')):
i = i.split('.') # 将.txt文件前缀和后缀分开
i = i[0] + '.jpg' # 将.txt文件名改为.jpg
a = imgall_path + '/' + i
shutil.move(a, '../new-images/4')