python按比例拆分数据集成训练跟验证集。使用glob、os.walk来获取路径进行数据集粗分。

好的工具可以让工作完成的事半功倍,非常完美。

1、通过代码把各种把已经分好类别的按比例划分未训练集、测试集:

# ratio是测试集的比例
def split_train_test(path,ratio):
    #列出当前文件从夹下的所有文件名称,包括文件跟文件夹
    dirs = os.listdir(path)
    train_path = os.path.join(path, 'train')
    test_path = os.path.join(path, 'val')
    if not os.path.isdir(train_path):
        #已存在的目录新建会报错
        os.mkdir(train_path)
    if not os.path.isdir(test_path):
        os.mkdir(test_path)
    for dir in dirs:
        train_dir = os.path.join(train_path,dir)
        test_dir = os.path.join(test_path,dir)
        os.mkdir(train_dir)
        os.mkdir(test_dir)
        files = os.listdir(os.path.join(path,dir))
        np.random.shuffle(files)
        test_num = int(len(files)*ratio)
        test_files = files[:test_num]
        train_files = files[test_num:]
        # 使用copy比copyfile更好。copyfile的原参数是必须未文件全路径,而copy里面也是copyfile,其src可以是路径,
        # 其文件名会自动添加。
        for file in test_files:
            # shutil.copyfile(os.path.join(path,dir,file),os.path.join(test_dir,file))
            shutil.copy(os.path.join(path,dir,file),os.path.join(test_dir,file))
        for file in train_files:
            # shutil.copyfile(os.path.join(path,dir,file),os.path.join(train_dir,file))
            shutil.copy(os.path.join(path,dir,file),os.path.join(train_dir,file))

2、使用glob获取路径下的文件:

glob是可以获取指定路径下的所有文件,并返回文件名的路径,其作用跟os.walk()功能差不多。如下:

q其适合使用在使用深度进行数据粗分类的工作上,因为需要把分好类的图片拷贝shutil.copy()、裁剪shutil.move到另一个文件夹上时用。如果只想获取指定路径下的文件名,不想带有路径则可以使用os.walk()

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值