2017-09-22 22 views
2

훈련 데이터 세트의 10 개 이미지를 테스트 데이터로 무작위로 선택하고 싶습니다. 선택한 데이터를 대상 경로에만 복사하면 작동합니다. 그러나 원본 데이터를 제거하려는 경우 일부만 제거 할 수 있습니다. os.remove()와 shutil.move() 함수를 모두 시도했지만 문제는 여전히 남아 있습니다. 아래는 내 스크립트입니다 :os.remove() 또는 shutil.move()가 파일의 일부만 이동할 수있는 이유

for label in labels: 

    training_data_path_ch1 = os.path.join(training_data_folder, label, 'ch1') 
    test_data_path_ch1 = os.path.join(test_data_folder, label, 'ch1') 
    training_data_path_ch5 = os.path.join(training_data_folder, label, 'ch5') 
    test_data_path_ch5 = os.path.join(test_data_folder, label, 'ch5') 

    ch1_imgs = listdir(training_data_path_ch1) 

    # Randomly select 10 images 
    ch1_mask = np.random.choice(len(ch1_imgs), 10) 
    ch1_selected_imgs = [ch1_imgs[i] for i in ch1_mask] 

    for selected_img in ch1_selected_imgs: 
     ch1_img_path = os.path.join(training_data_path_ch1, selected_img) 
     shutil.copy2(ch1_img_path, test_data_path_ch1) 
     os.remove(ch1_img_path) 

    print('Successfully move ' + label + ' ch1 images') 

그리고 실행 상태를 보여주는 이미지를 추가합니다.

Error Message 프로그램에서 실제로 이미지를 복사하고 일부 이미지를 제거 할 수 있지만 모든 이미지를 제거 할 수없는 이유는 무엇입니까?

아이디어가 있으십니까? 나는 어떤 도움을 주셔서 감사합니다!

답변

6

에서 :

ch1_mask = np.random.choice(len(ch1_imgs), 10) 

당신은 잠재적으로 어떤 일단 당신이 당신이 이미 복사 및 삭제 한 파일을 복사하려는 의미보다는 (그래서 당신은 복사 할 수 없습니다 같은 인덱스를 반환 받고있어 다시 제거됨), 대신 replace=False을 전달하십시오. 예 :

ch1_mask = np.random.choice(len(ch1_imgs), 10, replace=False) 
+0

감사합니다. 나는이 문제를 깨닫지 못했다. –