# os.listdir(DIRECTORY) 디렉토리에 있는 파일 리스팅
# os.path.getsize(PATH) 파일 사이즈 확인
# copyfile(source, destination) 원하는 디렉토리로 파일 복사
# random.sample(list, len(list)) 리스트를 섞는다.(파일명 섞기)



def split_data(SOURCE, TRAINING, TESTING, SPLIT_SIZE):
# YOUR CODE STARTS HERE
    # 1. 원본 디렉토리에서, 파일명을 모두 가져온다.
    filename_list = os.listdir(SOURCE)

    # 2. 잘 섞어준다.
    shuffled_list = random.sample(filename_list, len(filename_list))

    # 3. 트레이닝과 테스팅으로 분리하기 위해서 인덱스를 잡아준다.
    index = int(len(shuffled_list) * SPLIT_SIZE)

    # 4. 섞여있는 리스트에서, 위의 인덱스로, 학습용과 테스트용 파일을 분리한다.
    training = shuffled_list[0:index]
    testing = shuffled_list[index:]

    # 5. 각각의 분리된 파일을, 해당 디렉토리로 복사해 준다.
    for filename in training:
        if os.path.getsize(SOURCE + filename) > 0:
            copyfile(SOURCE+filename, TRAINING + filename)

    for filename in testing:
        if os.path.getsize(SOURCE + filename) > 0:
            copyfile(SOURCE + filename, TESTING + filename)


# YOUR CODE ENDS HERE


CAT_SOURCE_DIR = "/tmp/PetImages/Cat/"
TRAINING_CATS_DIR = "/tmp/cats-v-dogs/training/cats/"
TESTING_CATS_DIR = "/tmp/cats-v-dogs/testing/cats/"
DOG_SOURCE_DIR = "/tmp/PetImages/Dog/"
TRAINING_DOGS_DIR = "/tmp/cats-v-dogs/training/dogs/"
TESTING_DOGS_DIR = "/tmp/cats-v-dogs/testing/dogs/"

split_size = .9
split_data(CAT_SOURCE_DIR, TRAINING_CATS_DIR, TESTING_CATS_DIR, split_size)
split_data(DOG_SOURCE_DIR, TRAINING_DOGS_DIR, TESTING_DOGS_DIR, split_size)

 

먼저 파일들을 잘 섞은 후,  트레이닝은 90%, 테스트는 10%로 파일을 나눕니다. 그리고 파일의 사이즈가 0이 아니면, 
 그 파일을 트레이닝 또는 테스트 디렉토리에 실제로 저장을 합니다.

+ Recent posts