2017-09-22 3 views
2

Je veux choisir au hasard 10 images du jeu de données d'entraînement comme données de test. Si je ne fais que copier les données sélectionnées dans le chemin de destination, cela fonctionne. Mais si je veux supprimer les données source, il ne peut en supprimer que quelques-unes. J'ai essayé les fonctions os.remove() et shutil.move(), mais le problème persiste. Ci-dessous est mon script:Pourquoi os.remove() ou shutil.move() ne peut déplacer qu'une partie des fichiers

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

Et j'ajoute une image pour montrer l'état de fonctionnement.

Error Message Vous pouvez voir, le programme en effet peut copier les images et supprimer certaines des images, mais pourquoi il ne peut pas supprimer toutes les images?

Des idées? J'apprécie toute aide!

Répondre

6

Dans:

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

Vous potentiellement obtenir le même indice est revenu plus d'une fois ce qui signifie que vous êtes alors essayez de copier un fichier que vous avez déjà copié et supprimé (vous ne pouvez donc pas copier de nouveau comme il est enlevé), au lieu de passer replace=False, par exemple:

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

Merci beaucoup! Je n'ai pas réalisé ce problème. –