用于将文件移动到train dir或test dir的Python脚本

时间:2016-08-30 18:32:37

标签: python unix filehandle

我正在制作一个能够将我的数据潜入火车目录或测试目录的python脚本。我为脚本提供了一个比率,它表示列车/测试之间应该是什么比例,根据文件应该随机移动到训练或测试。

离。如果比率= 0.5那么我的数据集的一半将在列车中而另一半在测试中。

其他前。如果比率= 0.25,那么75%的数据集将在列车中,其余的在测试中。

但是这个部门每次似乎都错了。我试图分开84个文件/ 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机器上执行......如果这很重要?

1 个答案:

答案 0 :(得分:3)

您可以获取文件列表,随机播放,然后拆分相对于拆分比率。

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.