需求
我有一个文件夹,命名为maindir,第一级子目录subdir,第二级子目录sub2dir,第三级目录sub3dir,所有csv文件存放在第三级子目录sub3dir中,我该如何将文件夹中的所有csv文件取出来呢?
网上找了不少答案,然后没有找到合适的,自己写了一个,因此记录一下。
代码实现
dir、 fullfile函数的用法
dir(path)
的作用是列出path中的所有文件夹,其中包含两个隐藏文件夹.
和..
,其中一个点表示的是当前目录,两个点表示的是上一级目录。
fullfile(filepart1,filepart2...filepartN)
,表示的是将各部分的路径组合起来构成一个完整的文件名,举个例子就很容易明白了。
fullfile('C:','desktop','1.csv')
代码思路
这里需要理解的代码思路是使用层次遍历访问csv文件,因此,需要遍历几次文件夹,便需要几次循环。因此本方法仅适用于小于5层子目录的情况。多于5层的情况需要适用深度遍历。
maindir='E:\database'; %假设E盘中的database为总文件夹
subdir=dir(maindir); %得到的为一个结构体文件,长度为文件夹项目长度加2(一个点和两个点也在其中)
for i=1:length(subdir)
if(isequal(subdir(i).name,'.')||isequal(subdir(i).name,'..')||~subdir(i).isdir())
continue;%表示如果subdir表示的是当前目录,上层目录或者不是文件夹则跳过
end
sub2dirpath=fullfile(maindir,subdir(i).name);
sub2dir=dir(sub2dirpath);
for j =1:length(sub2dir)
if(isequal(sub2dir(j).name,'.')||isequal(sub2dir(j).name,'..')||~sub2dir(j).isdir())
continue;%表示如果subdir表示的是当前目录,上层目录或者不是文件夹则跳过
end
sub3dirpath=fullfile(maindir,subdir(i).name,sub2dir(j).name,'*.csv');%找出所有的csv文件
% 此处可以根据csv文件名将其中数据提取出来或做其他处理,或将csv文件路径分别保存起来均可
end
end