2017-08-07 1 views
1

私は自分のファイルを移動し、そこにファイルを置くための新しいフォルダを作成しようとしています。 私のMATLABディレクトリの画像フォルダには多くの.pngファイルがあります。無作為に80%を選択し、私のmatlabディレクトリのtrainingフォルダと呼ばれる別のフォルダに移動したい。私のコードは動作していないHeres。それは、ファイルを移動するために見つける傾ける:(ファイルをフォルダから別のフォルダにランダムに移動しますか?

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について考えることができる。

    コール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

ありがとうございます。私はこのコードを試して、私は "移動ファイル と一致するファイルが見つかりませんでした"というエラーを受け取りました。しかし、file_to_moveはアドレスとファイル名を持っています。だから私はそれらのファイルをトレーニングフォルダにコピーする方法を知らないのですか? – user1603454

+0

おそらく私が例として与えたパス名を使用しましたか?あなたが使ったパスの変数名で投稿を編集しました( 'data_add'、私は信じています)。 – informaton

+0

いいえ私はデータアドレスを使用しましたが、まだファイルが見つからないと言いました!! – user1603454

関連する問題