2017-08-07 9 views
1

J'essaie de déplacer mes fichiers et de créer un nouveau dossier pour y placer ces fichiers. J'ai beaucoup de fichiers .png dans mon dossier images dans mon répertoire MATLAB. Je veux choisir au hasard 80% d'entre eux et les déplacer vers un autre dossier appelé dossier de formation dans mon répertoire matlab. Heres mon code qui ne fonctionne pas. il ne peut pas trouver le fichier à déplacer :(déplacer au hasard des fichiers d'un dossier vers un autre dossier?

data_add = fullfile(cd,'images'); 
all_files = dir(data_add); 
all_files = all_files(3:end); 
num_files = numel(all_files); 
image_order = randperm(num_files); 
for k = 1:(image_order)*0.8 
    file_name = all_files(k).name; 
    file_add = all_files(k).folder; 
    file_to_move = fullfile('path_to_images\images',file_name); 
    mkdir training 
    movefile file_to_move training 

end 
+1

Vous ne devriez pas avoir mkdir à l'intérieur de la boucle. Dans quel cas file_add est-il utilisé? – Flynn

+0

Oui, j'ai complètement oublié ce mkdir. Je viens de l'écrire pour donner le chemin vers le fichier que je veux déplacer mais j'ai ensuite décidé d'utiliser fullfile() J'aurais aussi dû le commenter: S – user1603454

Répondre

0

A problèmes couple ici:

  1. Comme commentaires Flynn, l'appel à mkdir training ne doit être fait une fois, vous pouvez le placer avant votre boucle .
  2. Vous pouvez penser à la image_order variable de manière incorrecte quand il vient à votre boucle.

    l'appel image_order = randperm(num_files); produit un tableau d'indices au hasard commandés FRO m 1: num_files, ce qui est utile. Cependant, l'expression (image_order)*0.8 multiplie en réalité chacun de ces indices par 0,8, de sorte qu'ils ne sont plus des indices entiers valides (mis à part quelques-uns, comme 8 qui deviendraient 1).

    Je pense que ce que vous essayez et de vouloir faire est la suivante:

    mkdir('training'); 
    for k = 1:num_files*0.8 
        randK = image_order(k); 
        file_name = all_files(randK).name; 
        file_to_move = fullfile(data_add,file_name); 
    
        movefile(file_to_move, 'training'); % using function style 
    end 
    

Vous pouvez rencontrer d'autres problèmes suivant en fonction de l'endroit où la formation du dossier se trouve et où vous exécutez votre script , mais cela devrait être plus proche de ce que vous devez obtenir, et au moins localiser les fichiers pour vous.

+0

Merci beaucoup. J'ai essayé ce code et j'ai eu l'erreur "en utilisant movefile Aucun fichier correspondant n'a été trouvé". Mais le fichier file_to_move a l'adresse et le nom du fichier. Donc, je ne sais pas comment copier ces fichiers dans le dossier de formation? – user1603454

+0

Peut-être avez-vous utilisé le nom du chemin que j'ai donné comme exemple? J'ai édité le post avec le nom de la variable du chemin que vous avez utilisé ('data_add', je crois). – informaton

+0

Non, j'ai utilisé l'adresse de données, mais toujours dit ne peux pas trouver le fichier !! – user1603454