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()功能差不多。如下:

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

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

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

 

 

你可能感兴趣的:(python,深度学习)