Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将文件移动到train目录或test目录的Python脚本_Python_Unix_Filehandle - Fatal编程技术网

将文件移动到train目录或test目录的Python脚本

将文件移动到train目录或test目录的Python脚本,python,unix,filehandle,Python,Unix,Filehandle,我现在正在制作一个python脚本,它能够将我的数据放入train目录或test目录。我为脚本提供了一个比率,它表示训练/测试之间的比率应该是多少,根据这个比率,应该将文件随机移动到训练或测试 例如,如果比率=0.5,那么我的数据集的一半在训练中,另一半在测试中 其他示例:如果比率=0.25,则75%的数据集处于训练中,其余数据集处于测试中 但是分工似乎每次都是错的。。我正在尝试分离84个文件/目录,但似乎无法达到42/42的黄金分割。。有人建议我可以做些不同的事情吗 代码如下: import

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

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

其他示例:如果比率=0.25,则75%的数据集处于训练中,其余数据集处于测试中

但是分工似乎每次都是错的。。我正在尝试分离84个文件/目录,但似乎无法达到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计算机上执行。。。如果这很重要的话?

您可以获取文件列表,将其洗牌,然后根据拆分比率拆分

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:]

因为你是随机进行的,如果你做了很多次,你会得到一个中间有一个完美的50/50分割的分布,但不是每次跑步都是50/50分割。我建议生成一个1和0的列表,这是您拥有的文件量的长度,1和0的比例由您的
拆分决定,然后随机排列列表顺序。编辑:@user6770522的答案更好地实现了这一点。感谢我所需要的:)