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

2023-11-11

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将YOLOV5数据集不同类别分开的Python脚本 的相关文章

  • python中的编码检测库[重复]

    这个问题在这里已经有答案了 这在某种程度上与我的问题有关here https stackoverflow com questions 2305997 unicodedecodeerror problem with mechanize 我处理
  • 关于使用Python启动SSH隧道的问题

    我在从用 Python 编写的 HTTP RPC 服务器启动 SSH 隧道时遇到了麻烦 基于Python的BaseHTTPServer 有一个用Python编写的简单的HTTP RPC服务器 作为其中一项服务的一部分 我想启动从 RPC 服
  • 更改 Inkscape 的 Python 解释器

    在使用 Inkscape 时 我不断收到错误 这似乎意味着未满足 python 2 vs 3 的期望 尽管我已经安装了它们 例如 当我尝试从模板生成新文档时 我得到 Traceback most recent call last File
  • 如何配置散景图以具有响应宽度和固定高度

    我使用通过组件功能嵌入的散景 实际上我使用 plot sizing mode scale width 它根据宽度进行缩放并保持纵横比 但我想要一个响应宽度但固定或最大高度 这怎么可能实现呢 有stretch both and scale b
  • OpenCV Python 删除图像中的某些对象

    我正在使用带有 opencv 和 numpy 的 python 来检测天文中的星星 例如这个1 https i stack imgur com AKwEJ jpg图片 使用模板匹配 我可以用阈值检测星星 单击 2 2 https i sta
  • 按 ListProperty (NDB) 对查询进行排序

    如何按 ListProperty 对查询进行排序 该模型 class Chapter ndb Model title ndb StringProperty required True version ndb IntegerProperty
  • 同情因子简单关系

    我在 sympy 中有一个简单的因式分解问题 无法解决 我在 sympy 处理相当复杂的积分方面取得了巨大成功 但我对一些简单的事情感到困惑 如何得到 phi 2 2 phi phi 0 phi 0 2 8 因式分解 phi phi 0 2
  • 01 无效令牌[重复]

    这个问题在这里已经有答案了 嘿 学习 python3有一段时间了 遇到字典和dictionary name get 方法并尝试获取随机键值 问题 data data get key 1 它有效并且返回 1 但如果我使用data get ke
  • 使用 Pandas 查找自滚动高点以来的周期数

    我在 Pandas 中使用rolling max函数 http pandas pydata org pandas docs stable computation html moving rolling statistics moments
  • 打印一个 Jupyter 单元中定义的所有变量

    有没有一种更简单的方法来以漂亮的方式显示单个单元格中定义的所有变量的名称和值 我现在做的方式是这样的 但是当有30个或更多变量时我浪费了很多时间 您可以使用whos http ipython readthedocs io en stable
  • 检查对象数组中的多个属性匹配

    我有一个对象数组 它们都是相同的对象类型 并且它们有多个属性 有没有办法返回一个较小的对象数组 其中所有属性都与测试用例 字符串匹配 无论该属性类型是什么 使用列表理解all http docs python org 3 library f
  • Selenium 网页抓取与动态内容和隐藏数据表上的美丽汤

    真的需要这个社区的帮助 我正在使用 Selenium 和 Beautiful Soup 对 Python 中的动态内容进行网页抓取 问题是定价数据表无法解析为 Python 即使使用以下代码 html browser execute scr
  • 如何在Python中正确声明ctype结构+联合?

    我正在制作一个二进制数据解析器 虽然我可以依靠 C 但我想看看是否可以使用 Python 来完成该任务 我对如何实现这一点有一些了解 我当前的实现如下所示 from ctypes import class sHeader Structure
  • Python将csv数据导出到文件中

    我有以下运行良好的代码 但我无法修剪数据并将其存储在数据文件中 import nltk tweets love this car this view amazing not looking forward the concert def g
  • pandas apply:函数名是否带引号的区别

    简单数据框定义示例 df pd DataFrame A 2 4 1 B 8 4 1 C 6 2 7 df A B C 0 2 8 6 1 4 4 2 2 1 1 7 尝试理解以下块中函数参数调用的差异 df apply sum df app
  • 通过套接字发送字符串(python)

    我有两个脚本 Server py 和 Client py 我心中有两个目标 能够从客户端一次又一次地向服务器发送数据 能够将数据从服务器发送到客户端 这是我的 Server py import socket serversocket soc
  • 如何在包更新之间保留数据文件?

    我正在使用data files的论证setuptools setup 将配置文件安装到 etc和用户主目录 但是更新包pip install
  • Synapse Notebook 参考 - 使用参数从另一个笔记本调用 Synapse Notebook

    我有一个带有参数的突触笔记本 我试图从另一个笔记本调用该笔记本 我正在使用 run 命令 我应该如何将参数从基本笔记本传递到正在调用的笔记本 另外 对我来说 上述答案不起作用 作为对此问题的单独解决方案 下面是一个答案 打开笔记本并转到最右
  • 获取长度为 n 的所有(n-选择-k)组合

    我怎样才能获得长度的所有组合 按顺序 n从数字列表中 例如 给定列表 1 2 3 4 并设置n 3 我怎样才能得到这些结果 1 2 3 1 2 4 1 3 4 2 3 4 For combinations of all possible l
  • 将笔记本生成的 HTML 片段转换为 LaTeX 和 PDF

    在我的笔记本里有时会有 from IPython display import display HTML display HTML h3 The s is important h3 question of the day 但当我后来将笔记本

随机推荐

  • Python学习 -- 正则表达式(re模块)

    正则表达式是一种强大的模式匹配工具 用于在文本中查找和匹配特定模式的字符串 在Python中 我们可以使用re模块来操作和处理正则表达式 本篇技术博客将介绍正则表达式的基础语法和re模块的详细使用方法 并通过具体的代码案例来帮助初学者快速掌
  • sql server2005的死锁

    select request session id spid OBJECT NAME resource associated entity id tableName from sys dm tran locks where resource
  • 解决cannot resolve symbol “xxxx”的问题(亲测有效)

    今天做项目的时候导入了一个api接口 并且把附带的jar包也拷贝到了Maven项目中 但是有个方法一直报cannot resolve symbol xxxx 百思不得其解 在网上搜了各种各样的方法也没有解决 这个问题其实就是无法解析某方法
  • Java 实现简单邮件发送(带附件)

    目录 前言 一 添加pom依赖 二 完整发邮件代码 前言 最近写发邮件的功能时 需要把excel文件和邮件内容一起发送 简单记录 一 添加pom依赖
  • C# SuperSocket 手把手教你入门 傻瓜教程---3(Telnet服务器和客户端请求处理)

    C SuperSocket 手把手教你入门 傻瓜教程系列教程 C SuperSocket 手把手教你入门 傻瓜教程 1 服务器单向接收客户端发送数据 C SuperSocket 手把手教你入门 傻瓜教程 2 服务器和客户端双向通信 C Su
  • ICP算法(Iterative Closest Point迭代最近点算法)

    最近在做点云匹配 需要用c 实现ICP算法 下面是简单理解 期待高手指正 ICP算法能够使不同的坐标下的点云数据合并到同一个坐标系统中 首先是找到一个可用的变换 配准操作实际是要找到从坐标系1到坐标系2的一个刚性变换 ICP算法本质上是基于
  • JMeter快速入门知识系列(7)----JMeter断言之响应断言

    7 1 断言的定义 断言用于验证取样器请求或对应的响应数据是否返回了期望的结果 可以是看成验证测试是否预期的方法 对于接口测试与性能测试来说 就是测试Request Response 断言即可以针对Request进行 也可以针对Respon
  • C语言scanf()函数使用的注意事项

    scanf 函数相信就算刚学C语言的朋友也知道 这是一个标准输入函数 它是从标准输入流stdin中读内容的 它的第一个参数是格式化字符串 后面跟着的存储内容的地址列表 如果在全段代码中 只调用一次 且只获取一个变量内容的话 一般不会出现什么
  • POJ 275 Drainage Ditches|网络流|dinic模版

    问题描述 总时间限制 1000ms内存限制 65536kB 描述 Every time it rains on Farmer John s fields a pond forms over Bessie s favorite clover
  • Metis异常检测样本管理源码分析

    Metis异常检测样本管理源码分析 1 表说明 2 样本来源 2 1 样本导入 2 2 异常样本生成 2 3 异常样本打标 1 表说明 Metis一共三张表 anomaly sample dataset train task sample
  • C++STL常见面试题总结

    1 STL的介绍 STL 标准模板库 提高程序的 开发效率 和 复用性 STL包含的 6大组件 容器 迭代器 算法 仿函数 适配器 空间配置器 各组件的作用 容器 用于容纳一组相同类型的元素 迭代器 算法 仿函数 适配器 空间配置器 负责空
  • pytorch构造可迭代的DataLoader,动态流式读取数据源,不担心内存炸裂(pytorch Data学习三)

    构造迭代读取的Dataloader 首先需要可迭代的DataSet 这一部分详细请参考 pytorch构造可迭代的Dataset IterableDataset pytorch Data学习二 下面直接开始封装到DataLoader中 文章
  • 国内券商有没有提供股票量化交易,程序化交易接口的,怎么用?

    有的 python语言 免费使用 个人账户可开 直连交易所 行情及时准确 以前想实现股票的程序化交易门槛很高 要么资金实力足 要么技术实力强 小散户根本不用想 现在不一样了 门槛降低了 也没有什么资金要求 python语言 上手快速简单 个
  • uniapp插件使用

    1 插件页购买或者试用 2 manifest里勾选插件 3 按插件页文档集成 试用或者购买 选择自己文件uniapp应用标识 4 制作自定义基座 5 注意选择你刚自定义的基座运行 注意不是标准基座 6 如果还不行 卸载下手机上的应用 重新运
  • openldap (一) ldap连接

    连接和初始化ldap相关api在open c中提供 ldap open defconn 创建一个默认连接 调用者确保调用此函数时已经加锁 ldap open 初始化并连接到ldap服务器 ldap create 创建一个ldap ldap
  • 虚拟内存和分页文件

    分页文件 也就是虚拟内存文件 或叫做交换文件 Windows 2000 XP 2003中的分页文件名为pagefile sys 虚拟内存有什么用 内存在计算机中的作用很大 电脑中所有运行的程序都需要经过内存来执行 如果执行的程序很大或很多
  • Github隐藏功能显示自己的README,个人化你的Github主页

    创作者 全栈弄潮儿 个人主页 全栈弄潮儿的个人主页 个人社区 欢迎你的加入 全栈弄潮儿的个人社区 专栏地址 魔法工具 人工智能福利文章 分享几个国内免费可用的ChatGPT镜像 10几个类ChatGPT国内AI大模型 用 文心一言 1分钟写
  • Chrome OS 将实现在虚拟机上运行 Linux 应用程序

    Chromebook 用户很快就可以通过更简单的方式在 Google Chrome OS 硬件上运行 Linux 发行版和应用程序 据外媒 Chrome Unboxed 报道 Chromium Gerrit 上有一个新合并的提交 描述了 在
  • vulnhub-KIOPTRIX: LEVEL 1.2 (#3)-KioptrixVM3靶场

    以下演示均在测试环境进行 遵守法律 维护网络安全 靶场链接 Kioptrix Level 1 2 3 VulnHub 靶场为单层网络 下载解压之后 直接设置网络为nat模式 kali攻击机同样设置为nat 保持两者在同一个网段即可 本次没有
  • 将YOLOV5数据集不同类别分开的Python脚本

    将YOLOV5数据集不同类别分开的Python脚本 import os import shutil labelall path r C Users 1 Desktop test labels all 所有标签存放的路径 imgall pat