随机将文件从文件夹移动到另一个文件夹?

时间:2017-08-07 16:49:46

标签: matlab file random move training-data

我正在尝试移动我的文件并创建一个新文件夹以将这些文件放在那里。 我的MATLAB目录中的images文件夹中有很多.png文件。我想随机选择其中的80%并将它们移动到我的matlab目录中名为training folder的另一个文件夹中。继承我的代码不起作用。它无法找到要移动的文件:(

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 个答案:

答案 0 :(得分:0)

这里有几个问题:

  1. 与Flynn评论一样,对mkdir training的调用只需要进行一次,因此您可以将它放在循环之前。
  2. 在for循环中,您可能会错误地考虑变量image_order

    调用image_order = randperm(num_files);从1:num_files生成一组随机排序的索引,这很有帮助。然而,表达式(image_order)*0.8实际上是将这些索引中的每一个乘以0.8,使得它们不再有效,整数索引(除了少数,如8,它将变为1)。

    我认为你正在尝试和想要做的是:

    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
    
  3. 您可能会遇到其他问题,具体取决于文件夹培训的位置以及您运行脚本的位置,但这应该更接近您要获取的内容,并至少为您找到文件。