MATLAB遍历子文件夹及其下文件

本文介绍了如何使用MATLAB遍历子文件夹及其下的文件,特别是涉及了dir函数和uigetdir函数的应用。在主文件夹maindir下,存在多个子文件夹,每个子文件夹中包含特定格式的文件。dir函数返回文件和子文件夹的结构信息,而uigetdir则提供了一个图形界面来选择文件夹。对于更复杂的多层目录和不同文件类型的处理,可以通过层次遍历和深度遍历来实现。

MATLAB遍历子文件夹及其下文件

以前从未遇到过用MATLAB批处理文件的情况,此次项目需要批量将二进制数据文件导入matlab进行svm分类,现将matlab遍历子文件夹及其文件的方法记录下来。


文件目录结构

/maindir
    |-- subdir1
        |-- datafile1.dat
        |-- datafile2.dat
    |-- subdir2
        |-- datafiel3.dat
        |-- datafiel4.dat
    |-- subdir3
        |-- datafile5.dat
        |-- datafile6.dat

主文件夹maindir下含有三个子文件夹,子文件夹分别包含两个二进制数据文件

函数dir

可以使用函数dir,D = DIR('directory_name')返回一个结构数组,包含了文件夹directory_name下的子文件夹和子文件的一些信息,第1个成员是文件名,第4个成员表示是否为文件夹。

要注意的是第1个数组元素和第2个数组元素分别是’.’和’..’,表示当前目录和上层目录。

代码实现

maindir = 'D:\MATLAB\project';
subdir  = dir( maindir );

for i = 1 : leng
### 遍历文件夹的方法 为了在 MATLAB遍历指定目录及其所有文件夹中的文件,可以采用递归方法来实现这一功能。下面提供了一种通过函数 `getAllFiles` 来获取给定路径下所有的 `.avi` 文件列表的方式[^1]。 ```matlab function fileList = getAllFiles(dirName) d = dir(fullfile(dirName, '*.*')); % 获取当前文件夹下的所有文件文件夹信息 fileList = {}; % 初始化文件列表为空 for k = 1:length(d) % 循环遍历每一个条目 thisFile = d(k); if thisFile.isdir % 如果是文件夹,则递归调用本函数继续深入查找 subFolder = fullfile(dirName, thisFile.name); if ~ismember(subFolder, {'.', '..'}) % 排除 '.' 和 '..' 这两个特殊项 fileList = [fileList; getAllFiles(subFolder)]; end elseif endsWith(thisFile.name, '.avi') % 只收集 .avi 类型的文件 fullFileName = fullfile(dirName, thisFile.name); fileList{end+1} = fullFileName; end end end ``` 此代码定义了一个名为 `getAllFiles` 的函数,该函数接收一个参数 `dirName` 表示起始搜索位置,并返回一个包含找到的所有 `.avi` 文件绝对路径字符串数组的结果。对于每个遇到的文件夹,都会再次调用自己来进行更深层次的探索直到最底层为止;而对于匹配到的目标文件则记录其完整路径至最终输出列表中去。 使用上述自定义函数前需先设置好初始工作区: ```matlab % 设置目标根目录 rootDir = uigetdir('D:\Sequences\Weizmann\bend', 'Select Directory'); if rootDir(end) ~= '\' rootDir = [rootDir, '\']; end % 调用函数并显示结果 allAVIfiles = getAllFiles(rootDir); disp(allAVIfiles); ``` 这段脚本允许用户交互式地选择想要操作的具体磁盘上的某个特定文件夹作为起点,之后便能自动检索出其中全部符合条件(即具有`.avi` 扩展名)的数据对象供后续分析处理之用了。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值