2016-08-30 58 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

回答