Python 随机抽取文件进行移动(用于从训练集抽取测试集)

一般情况下,在用数据集对神经网络进行训练之前我们要将其10等分,其中9份用于训练,1份用于测试,我们就可以进行随机抽取。


字符串的相关操作

以 f 或 F 开头的字符串,以 {} 包含的部分可以进行值替换。例如:

dst = "D:/out/some"
label = 3
dstpath = f"{dst}/{label}"
print(dstpath)
>>>D:/out/some/3

在字符串前加r可防止字符串转义,或者在反斜杠前加反斜杠,再或者使用正斜杠替代反斜杠也可。例如:

root = glob.glob("D:\out\some\cag\\3")
root = glob.glob(r"D:\out\some\cag\3")
root = glob.glob("D:/out/some/cag/3")

完整代码:

import os, random, shutil ,glob, tqdm

root = glob.glob(r"origin_root/*")
dst = "target_root"

for imgdirs in root:
    imgdirs = imgdirs.replace("\\", "/")
    files = os.listdir(imgdirs)
    filenum = len(files)
    label = imgdirs.split("/")[-1]
    filesample = random.sample(files, filenum//10)  # 随机从每个类别文件夹中选取1/10的图片

    for filename in tqdm.tqdm(filesample):
        dstpath = f"{dst}/{label}"
        if not os.path.exists(dstpath):
            os.makedirs(dstpath)
        shutil.move(f"{imgdirs}/{filename}", f"{dstpath}/{filename}")

其中origin_root表示图片类别文件夹所在的路径,/*表示origin_root下所有的文件夹,root就是这些文件夹路径的列表,通过os.listdir()我们找到文件夹下的图片,随机抽取总数的1/10。target_root为目标路径。tqdm可以加上进度条。label为不同图片的标签,即类别。

 

 

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用Python中的random和os模块来实现从目录中随机抽取一定比例的图像文件,并将其分别保存到训练集测试集的新文件夹中。 首先,我们需要导入必要的模块: ```python import os import random import shutil ``` 然后,我们可以定义两个变量,分别表示训练集测试集的比例: ```python train_ratio = 0.8 # 训练集比例 test_ratio = 0.2 # 测试集比例 ``` 接下来,假设我们的图像文件都保存在一个名为“images”的目录中,我们可以使用os模块中的listdir函数来获该目录下的所有文件名,并使用random模块中的shuffle函数将它们随机打乱: ```python file_names = os.listdir("images") random.shuffle(file_names) ``` 然后,我们可以计算出训练集测试集应该包含的文件数量: ```python num_train = int(len(file_names) * train_ratio) num_test = len(file_names) - num_train ``` 接着,我们可以使用os模块中的makedirs函数来创建新的训练集测试集目录: ```python os.makedirs("train") os.makedirs("test") ``` 最后,我们可以使用shutil模块中的copy函数将随机的图像文件复制到训练集测试集的新目录中: ```python for i in range(num_train): shutil.copy("images/" + file_names[i], "train/" + file_names[i]) for i in range(num_train, num_train + num_test): shutil.copy("images/" + file_names[i], "test/" + file_names[i]) ``` 完整代码如下: ```python import os import random import shutil train_ratio = 0.8 # 训练集比例 test_ratio = 0.2 # 测试集比例 file_names = os.listdir("images") random.shuffle(file_names) num_train = int(len(file_names) * train_ratio) num_test = len(file_names) - num_train os.makedirs("train") os.makedirs("test") for i in range(num_train): shutil.copy("images/" + file_names[i], "train/" + file_names[i]) for i in range(num_train, num_train + num_test): shutil.copy("images/" + file_names[i], "test/" + file_names[i]) ``` 运行完毕后,您将得到一个名为“train”的目录和一个名为“test”的目录,它们分别包含随机训练集测试集图像文件

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值