2017-09-22 7 views
2

Ich möchte nach dem Zufallsprinzip 10 Bilder aus dem Trainingsdatensatz als Testdaten auswählen. Wenn ich nur die ausgewählten Daten in den Zielpfad kopiere, funktioniert es. Aber wenn ich die Quelldaten entfernen möchte, kann sie nur einige davon entfernen. Ich habe beide os.remove() und shuttil.move() Funktion versucht, aber das Problem bleibt. Die unten ist mein Skript:Warum os.remove() oder shutil.move() nur einen Teil der Dateien verschieben kann

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') 

Und ich hinzufügen, um ein Bild des laufenden Status zu zeigen.

Error Message Sie können sehen, das Programm kann tatsächlich die Bilder kopieren und einige der Bilder entfernen, aber warum kann nicht alle Bilder entfernt werden?

Irgendwelche Ideen? Ich schätze jede Hilfe!

Antwort

6

In:

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

Sie bekommen möglicherweise den gleichen Index ergab mehr als einmal das heißt, Sie sind dann versuchen, eine Datei zu kopieren, die Sie bereits kopiert und gelöscht (so können Sie nicht kopieren es wieder wie es entfernt ist), stattdessen passiere replace=False, zB:

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

Vielen Dank !!! Ich habe dieses Problem nicht erkannt. –

Verwandte Themen