python用代码划分数据集为训练集和测试集(从一个文件夹中随机剪切一定比例的图片到另一文件夹中)

import os
import random
import shutil


# source_file:源路径, target_ir:目标路径
def cover_files(source_dir, target_ir):
    for file in os.listdir(source_dir):
        source_file = os.path.join(source_dir, file)

        if os.path.isfile(source_file):
            shutil.copy(source_file, target_ir)


def ensure_dir_exists(dir_name):
    """Makes sure the folder exists on disk.
  Args:
    dir_name: Path string to the folder we want to create.
  """
    if not os.path.exists(dir_name):
        os.makedirs(dir_name)


def moveFile(file_dir, save_dir):
    ensure_dir_exists(save_dir)
    path_dir = os.listdir(file_dir)  # 取图片的原始路径
    filenumber = len(path_dir)
    rate = 0.1  # 自定义抽取图片的比例,比方说100张抽10张,那就是0.1
    picknumber = int(filenumber * rate)  # 按照rate比例从文件夹中取一定数量图片
    sample = random.sample(path_dir, picknumber)  # 随机选取picknumber数量的样本图片
    # print (sample)
    for name in sample:
        shutil.move(file_dir+'/'+name, save_dir+'/'+name)


if __name__ == '__main__':
    file_dir = '/media/gpu/00758835-1a92-4611-8ae4-1518102a53d6/coding/CD-VAE-main/data/test'  # 源图片文件夹路径
    save_dir = '/media/gpu/00758835-1a92-4611-8ae4-1518102a53d6/coding/CD-VAE-main/data/testtest'  # 移动到新的文件夹路径
    moveFile(file_dir,save_dir)


以下是一个简单的Python代码示例,它可以将一个文件夹的数据随机分成训练集测试集和验证集: ``` python import os import random import shutil # 定义文件夹的路径 data_folder = "/path/to/data_folder" # 定义训练集测试集和验证集的比例(以0.8、0.1、0.1的比例划分) train_ratio = 0.8 test_ratio = 0.1 val_ratio = 0.1 # 获取文件夹的所有文件名 file_names = os.listdir(data_folder) # 随机打乱文件名的顺序 random.shuffle(file_names) # 计算每个集合的文件数 num_train = int(len(file_names) * train_ratio) num_test = int(len(file_names) * test_ratio) num_val = int(len(file_names) * val_ratio) # 定义训练集测试集和验证集的文件夹路径 train_folder = "/path/to/train_folder" test_folder = "/path/to/test_folder" val_folder = "/path/to/val_folder" # 确保文件夹存在 if not os.path.exists(train_folder): os.makedirs(train_folder) if not os.path.exists(test_folder): os.makedirs(test_folder) if not os.path.exists(val_folder): os.makedirs(val_folder) # 将文件分配到不同的集合 train_files = file_names[:num_train] test_files = file_names[num_train:num_train+num_test] val_files = file_names[num_train+num_test:] # 将文件移动到对应的集合文件夹 for file_name in train_files: src_path = os.path.join(data_folder, file_name) dst_path = os.path.join(train_folder, file_name) shutil.copyfile(src_path, dst_path) for file_name in test_files: src_path = os.path.join(data_folder, file_name) dst_path = os.path.join(test_folder, file_name) shutil.copyfile(src_path, dst_path) for file_name in val_files: src_path = os.path.join(data_folder, file_name) dst_path = os.path.join(val_folder, file_name) shutil.copyfile(src_path, dst_path) ``` 此代码文件夹的数据随机分为训练集测试集和验证集,并将它们分别复制到对应的文件夹。请注意,此示例仅适用于数据量较小的情况。对于大型数据集,可能需要使用更高级的方法来确保数据集随机性和均衡性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值