2016-08-30 4 views
2

저는 열차 디렉토리 또는 테스트 디렉토리에 내 데이터를 다이빙 할 수있는 파이썬 스크립트를 만드는 순간입니다. 스크립트에 기차/테스트 간의 비율이 무엇인지 말해주는 비율을 제공합니다.이 비율에 따라 파일을 무작위로 이동하거나 테스트해야합니다.열차 디렉토리 또는 테스트 디렉토리로 파일을 이동하는 Python 스크립트

ex. 비율이 0.5이면 내 데이터 집합의 절반이 기차에 있고 나머지 절반은 테스트에 사용됩니다.

기타 ex. 비율이 0.25이면 75 % 데이터 집합이 열차에 있고 나머지는 테스트에 있습니다.

하지만 부서는 매번 잘못된 것처럼 보입니다. 나는 84 개의 파일/dir을 분리하려고 노력하고 있으며, 황금 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) 

이 중요한 경우 코드가 ... 유닉스 시스템에서 실행되고?

+1

당신이 많은, 많은 시간, 당신은 중앙에 완벽한 50/50 분할과 분배를 얻을 것했다면 당신은 무작위로 그 일을하고 있지만 모든 실행이되기 때문에 50/50 분할. 나는 당신이 가지고있는 파일의 길이 인 1과 0의리스트를 생성하고, 'split'에 의해 결정된 1과 0의 비율로리스트 순서를 랜덤화할 것을 제안합니다. 편집 : @ user6770522의 답변이 더 나은 구현을했습니다. – perfect5th

답변

관련 문제