(MATLAB)读取主文件夹内所有子文件及包含特定字符的所有文件(含代码)

您所在的位置:网站首页 matlab判断字符串里面存在特定字符 (MATLAB)读取主文件夹内所有子文件及包含特定字符的所有文件(含代码)

(MATLAB)读取主文件夹内所有子文件及包含特定字符的所有文件(含代码)

2024-06-08 00:10| 来源: 网络整理| 查看: 265

(MATLAB)读取主文件夹内所有子文件及包含特定字符的所有文件(含代码) 代码测试其他

by HPC_ZY

MATLAB读取主文件夹内所有子文件及包含特定字符的所有文件。Python的os.walk()函数就能完成这个任务,但MATLAB自带的dir()只能搜索当前文件夹内的文件夹及文件,所以自己写了这么一个函数(利用递归的思想)。在这里分享给大家。

代码 % 获取主路径下所有的文件、子路径、子路径下文件 % % 输入: % folder 文件夹 % str 特定字符 % % 输出: % folder 子文件夹列表(文件夹) % file 文件列表(文件-所在文件夹) % list 关系总表(文件夹-子文件夹-文件) % % example: % [folder,file,list] = findfolderfile('.\test\img','jpg'); % % by HPC_ZY 20200105 %% 获取某文件夹下所有子文件列表,与含特定字符的所有文件列表 function [folder,file,list] = findfolderfile(folder,str) % 利用递归获得子文件夹与文件 list = folderfile(folder,str,[]); % 文件夹总表 folder = list(:,1); % 文件总表 file = []; for k = 1:size(list,1) if ~isempty(list(k,3)) for n = 1:length(list{k,3}) file = cat(1,file,{list{k,1},list{k,3}{n}}); end end end end %% ------------------递归搜索当前文件夹内子文件夹与文件------------- function list = folderfile(folder,str,list) % 获取当前文件夹内的子文件夹和文件 dirout = dir(fullfile(folder)); [folder,subfolder,file] = listfolderfile(dirout,str); % 保存搜索结果 list = cat(1,list,{folder,subfolder,file}); % 搜索子文件夹 if ~isempty(subfolder) for k = 1:length(subfolder) list = folderfile(fullfile(folder,subfolder{k}),str,list); end end end %%------------- 分辨文件夹和文件,并去除./..文件----------- function [folder,subfolder,file] = listfolderfile(list,str) % 当前目录 folder = list(1).folder; % 子目录 idx = cell2mat({list.isdir}); subfolder = {list(idx).name}'; % 文件 file = {list(~idx).name}'; % 剔除 ./.. for k = length(subfolder):-1:1 if sum(strcmp(subfolder{k},{'.','..'})) subfolder(k) = []; end end % 筛选指定 if ~isempty(str) for k = length(file):-1:1 if isempty(strfind(file{k},str)) file(k) = []; end end end end 测试 %% 获取路径下所有子文件和文件列表 [folder,file,list] = findfolderfile('.\test\img',[]); %% 获取路径下所有txt格式的文件列表 [~,file,~] = findfolderfile('.\test\img','.txt');

注:我这里讲的获取所有文件,仅仅指获取它们的文件名列表,如果需要读取并进行处理还需另写代码

比如,读取路径下所有jpg格式的图像

[~,file,~] = findfolderfile('.\test\img','.jpg'); fileNum = length(file); im = cell(fileNum,1); for n = 1:fileNum disp(file{n,2}) % 看看图像文件名 im{n} = imread(fullfile(file{n,1},file{n,2})); % 读取图像, 文件路径+文件名 end

注:为了更方便使用,没有使用“文件路径+文件名”,而是把它们拆开存放的,就如上代码一样

其他

1、做了有限的测试没有出现报错,如果小伙伴们测试有问题,欢迎指出 2、正如标题所写,该代码功能可以搜索“包含指定字符”文件而非“指定类型”,测试示例中只是恰好可以这样用。如,你有一个图片的文件名为“ test.avi.txt.jpg ”,那么你搜索“.avi”或“.txt”类型文件的时候都会误搜到它(当然这种情况出现的概率很低)。 3、有更多更好的点子欢迎留言,如果简单实用,可以无偿实现。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3