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:]
我正在制作一个 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:]