我有這樣的代碼:在文件夾上循環?
myFolder='C:\Users\abe7rt\Desktop\dat\1';
filePattern=fullfile(myFolder, '*.txt');
txtFiles=dir(filePattern);
現在,DAT是一個包含「1,2,3」的文件夾一個文件夾,每個文件夾中包含一個20個TXT文件。 以前的代碼能夠從1個文件夾中獲取txt文件。現在我的問題是:是否有一種方法可以遍歷所有目錄?
我有這樣的代碼:在文件夾上循環?
myFolder='C:\Users\abe7rt\Desktop\dat\1';
filePattern=fullfile(myFolder, '*.txt');
txtFiles=dir(filePattern);
現在,DAT是一個包含「1,2,3」的文件夾一個文件夾,每個文件夾中包含一個20個TXT文件。 以前的代碼能夠從1個文件夾中獲取txt文件。現在我的問題是:是否有一種方法可以遍歷所有目錄?
是有:)
一個很不錯的功能是這一個:
您可以使用它像這樣:
fileList = getAllFiles('D:\dic');
然後,你就必須得擺脫非txt文件,例如通過檢查循環內的擴展!
那麼你可以做類似
for k=1:3
myFolder{k}=['C:\Users\abe7rt\Desktop\dat\' num2str(k)];
filePattern{k}=fullfile(myFolder{k}, '*.txt');
txtFiles{k}=dir(filePattern{k});
end
如果性能/內存是一個問題可以很明顯的預分配陣列/單元陣列的尺寸。
您可以使用Matlab的函數fileattrib
的遞歸版本,然後選擇帶有regexp
的txt文件。此解決方案適用於任何數量的文件夾和任何級別的嵌套。
[success,message,messageid] = fileattrib('C:\Users\abe7rt\Desktop\dat\*');
[names{1:numel(message)}] = deal(message.Name);
names_txt = names(~cellfun(@isempty, regexp(names,'\.txt$')));
單元陣列names_txt
包含所有TXT文件的全名。所以names_txt{n}
是一個字符串,其全名爲第n個文件。
確保您將最終的\*
添加到根路徑。
另一種可能性,使用Apache公共圖書館自帶的MATLAB:
function fileNames = findAllFiles(directory, wildcardPattern)
import org.apache.commons.io.filefilter.*;
import org.apache.commons.io.FileUtils;
import java.io.File;
files = FileUtils.listFiles(File(directory),...
WildcardFileFilter(wildcardPattern),...
FileFilterUtils.trueFileFilter());
fileNames = cellfun(@(f) char(f.getCanonicalPath()),...
cell(files.toArray()),...
'uniformOutput', false);
end
使用例如如:
files = findAllFiles('C:\Users\abe7rt\Desktop\dat', '*.txt')
如果你想上的目錄,名稱也將一個模式中,搜索應該下降,你可以簡單地更換FileFilterUtils.trueFileFilter()
另一個WildcardFileFilter
。
是否可以使用這個,但在文件夾?比如,是否有可能遍歷文件夾名稱而不是文件?因此,結果將是一個具有指定名稱的文件夾(路徑)列表? –
但在這種情況下,我將無法控制所有數據*太多的數據..我有20個子文件夾? – mecaeng
好吧,這是特別的...你會得到什麼錯誤信息? –
nooo。它真的工作,但我只是在文件夾中的所有txt,所以我不能夠控制這個txt文件。 – mecaeng