Python 将文件移动到训练目录或测试目录的脚本

Python script to move files to either a train dir or test dir

我正在制作一个 python 脚本,该脚本能够将我的数据放入训练目录或测试目录中。我为脚本提供了一个比率,它说明 train/test 之间的比率应该是多少,根据该比率应该随机移动文件以进行训练或测试。

例如。如果比率 = 0.5,那么我的数据集的一半将在训练中,另一半将在测试中。

其他例子。如果比率 = 0.25,那么 75% 的数据集将在训练中,其余的在测试中。

但除法似乎每次都是错误的。我正在尝试分离 84 files/dirs,但似乎无法达到黄金 42/42 分离。任何建议我可以做些什么不同?

代码如下:

import sys
import os
import shutil
import numpy
import random 


src = sys.argv[1]
destination_data = sys.argv[2]

src_abs = os.path.abspath(src)
destination_data_abs = os.path.abspath(destination_data)

src_files = os.listdir(src_abs)


def copytree(src, dst, symlinks=False, ignore=None, split=0.5):
    for item in os.listdir(src):
        s = os.path.join(src, item)
        d = os.path.join(dst, item)
        d_test = os.path.join(dst, 'test', item)
        d_train = os.path.join(dst, 'train', item)

        print d_test
        print d_train
        minmax=0.0, 1.0
        rand = random.uniform(*minmax)
        print rand
        if rand > split:
            # Inserted into train
            if os.path.isdir(s):
                shutil.copytree(s, d_train, symlinks, ignore)
                print "Copytree used! - TRAIN"
            else:
                shutil.copy2(s, d_train)
                print "Copy 2 used! - TRAIN"
        else:
            # Inserted into test
            if os.path.isdir(s):
                shutil.copytree(s, d_test, symlinks, ignore)
                print "Copytree used! - TEST"
            else:
                shutil.copy2(s, d_test)
                print "Copy 2 used! - TEST"

copytree(src_abs,destination_data_abs,True)

代码正在 unix 机器上执行...如果这很重要?

你可以把文件列表,shuffle它,然后split它相对于split ratio

import os
import numpy

src_files = os.listdir(".")
n_files = len(src_files)

split_ratio = 0.5
split_index = int(n_files * split_ratio)

numpy.random.shuffle(src_files)

print src_files[0:split_index]
print src_files[split_index:]

Flipping a coin 84 times will result in a "perfect" 42 heads / 42 tails with a probability of 0.0868.