将YOLOV5数据集不同类别分开的Python脚本

将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')

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值