2016-08-30 56 views
2

我是一个能够将我的数据潜入列表目录或测试目录的Python脚本的时刻。我给脚本提供了一个比率,该比例说明了火车/测试之间的比率应该是多少,根据该比率应该随机将文件移动到训练或测试。Python脚本将文件移动到列表目录或测试目录

ex。如果比例= 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机器上执行的代码...如果该事项?

+1

因为你随机做,如果你做了很多很多次,你会得到在中心一个完美的50/50分配,但不是每一次运行会50/50分割。我建议生成一个1s和0s的列表,这是你拥有的文件数量的长度,其中1s和0s的比例由你的'split'决定,然后随机排列列表顺序。 编辑:@ user6770522的答案有更好的执行此。 – perfect5th

回答