2017-08-07 293 views
1

我想移動我的文件並創建一個新文件夾來將這些文件放在那裏。 我在我的MATLAB目錄中的圖像文件夾中有許多.png文件。我想隨機選擇其中的80%,並將它們移動到另一個名爲training folder的文件夾中,位於我的matlab目錄中。下面是我的代碼,這是行不通的。它不能找到該文件移動:(隨機將文件從一個文件夾移動到另一個文件夾?

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

你不應該有mkdir內循環。什麼是file_add用於? – Flynn

+0

是的,我完全忘了那個mkdir。我只是寫了它給我要移動的文件的路徑,但後來我決定使用fullfile()我也應該這樣評論:S – user1603454

回答

0

一對夫婦的問題在這裏:

  1. 像弗林評論,調用mkdir training只需要進行一次,所以您可以在循環之前放置。
  2. 你可能會考慮變量image_order錯誤,當涉及到你的for循環。

    呼叫image_order = randperm(num_files);產生隨機排序索引數組來回m 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 
    

您可能會遇到其他問題下一個不同的地方文件夾訓練所在和你在哪裏運行腳本,但這應該更接近你要得到的東西,並且至少爲你找到文件。

+0

非常感謝。我試過這段代碼,我得到錯誤「using movefile 沒有找到匹配的文件」。但是file_to_move有地址和文件名。所以我不知道如何將這些文件複製到培訓文件夾? – user1603454

+0

也許你使用了我給出的路徑名稱作爲例子?我使用你使用的路徑的變量名稱('data_add',我相信)編輯了這篇文章。 – informaton

+0

不,我使用的數據地址,但仍然說不能找到該文件! – user1603454

相關問題