matlab递归文件夹以及子文件夹中所有.mat后缀文件

递归读取某文件夹及其子文件夹中,后缀为".mat"的文件路径

方式一:递归函数

clc; clear; close all; 
fclose all;

fileDir = 'F:\数据';
dataPath = getAllDataPath(fileDir); % 递归读取fileDir路径下的".mat"文件的路径

%% 递归读取fileDir路径下的".mat"文件的路径
function dataPath = getAllDataPath(fileDir)
subDirs = dir(fileDir); % 列出当前文件夹中的文件和文件夹
dataPath = [];
for i = 1:length(subDirs)
    % 判断是否为文件夹,如果是则递归;如果否,则查找后缀为".mat"的文件
    if subDirs(i).isdir && subDirs(i).name ~= "." && subDirs(i).name ~= ".."
        recursionDir = [subDirs(i).folder, '\', subDirs(i).name];
        dataPath = [dataPath; string(getAllDataPath(recursionDir) )];
    elseif subDirs(i).name ~= "." && subDirs(i).name ~= ".." && subDirs(i).name(end-3:end) == ".dat"
        filePath = [subDirs(i).folder, '\', subDirs(i).name];
        dataPath = [dataPath; string(filePath)];
    end
end
end

打印函数返回dataPath 就是matlab递归读取文件夹以及子文件夹中所有.mat后缀文件。

方式二:dir函数特性

获取C:/Users/Administrator/Desktop文件夹下(不包含子文件夹)的所有.mat文件

clear
dirOutput = dir('C:/Users/Administrator/Desktop/**/*.mat');
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);

封装成函数。调用时若输入两个参数,则默认搜索子文件夹

function filepath = getFilesPath(baseDir, ext, findSubfile)
if nargin == 2  % 判断输入的参数是否为2
    findSubfile = true;
end
if findSubfile
    dirOutput = dir([baseDir '/**/*.' ext]);
else
    dirOutput = dir([baseDir '/*.' ext]);
end
folder = string({dirOutput.folder}');
file = string({dirOutput.name}');
filepath = strcat(folder, '\', file);
end

调用方法

getFilesPath('C:/Users/Administrator/Desktop', 'mat')

得到同样的结果。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容