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