如何迅速划分数据集(python实现)

这些天在做数据集的划分,想这除了自己人力随机挑选以外还有没有更便捷的方式,于是诞生了这篇文章。

这篇文章的思路是:

1.随机在文件夹中挑选按照划分好的数量的比例的图片,将这些图片【移动】到新的文件夹中

2.比对新的文件夹中的图片的名称和旧文件夹中标签(yolov5的格式是txt)的名称,如果在新文件夹中的图片的名称与旧文件夹中txt的名称一致的话,就把txt移动到新的文件夹中

于是,会有两个文件的代码,先执行随机挑选,再执行移动标签

随机挑选的代码:

import os
import random
import shutil

# 定义当前文件夹和目标文件夹的路径
current_folder = "./当前文件夹的路径"  # 替换为实际的当前文件夹路径
target_folder = "./目标文件夹的路径"  # 替换为实际的目标文件夹路径

# 要移动的图片数量
num_images_to_select = 5  # 替换为您想要的数量,一般是成比例的,需要自行计算

# 获取当前文件夹中的所有图片文件
image_files = [f for f in os.listdir(current_folder) if f.endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp'))]

# 检查是否有足够的图片文件供选择
if len(image_files) < num_images_to_select:
    print("当前文件夹中的图片文件数量不足以移动指定数量的图片。")
else:
    # 随机选择图片文件
    selected_images = random.sample(image_files, num_images_to_select)

    # 确保目标文件夹存在,如果不存在则创建它
    if not os.path.exists(target_folder):
        os.makedirs(target_folder)

    # 移动选定的图片文件到目标文件夹
    for image in selected_images:
        source_path = os.path.join(current_folder, image)
        target_path = os.path.join(target_folder, image)
        shutil.move(source_path, target_path)

    print(f"{num_images_to_select} 张图片已成功移动到目标文件夹。")

结束之后,新的图片文件夹已经诞生,执行下一段代码:

import os
import shutil

# 定义文件夹A、B和C的路径
folder_a = "./存放新图片的文件夹路径"  #自行替换为自己文件夹的路径
folder_b = "./存放全部原始标签的文件夹路径" 
folder_c = "./存放新标签的文件夹路径"  

# 获取文件夹A中的所有图片文件名
image_files = [f for f in os.listdir(folder_a) if f.endswith(('.jpg', '.jpeg', '.png', '.gif', '.bmp'))]

# 获取文件夹B中的所有txt文件名
txt_files = [f for f in os.listdir(folder_b) if f.endswith('.txt')]

# 创建文件夹C(如果它不存在)
if not os.path.exists(folder_c):
    os.makedirs(folder_c)

# 检查图片文件名是否与txt文件名匹配
for image_file in image_files:
    txt_file_name = os.path.splitext(image_file)[0] + ".txt"  # 构造相应的txt文件名
    if txt_file_name in txt_files:
        txt_file_source = os.path.join(folder_b, txt_file_name)
        txt_file_target = os.path.join(folder_c, txt_file_name)
        shutil.move(txt_file_source, txt_file_target)

print("已将匹配的txt文件从文件夹B移动到文件夹C。")

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值