matlab需要读取一个文件夹下的多个子文件夹中的某种指定格式的文件,该如何批量操作呢?
-
一. 常用函数介绍:
首先,先介绍几个matlab中常用的函数
1. dir()
Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中.
dir函数可以有调用方式为:
- dir('.') 列出当前目录下所有子文件夹和文件
- dir('G:\Matlab') 列出指定目录下所有子文件夹和文件
- dir('*.m') 列出当前目录下符合正则表达式的文件夹和文件
例如:
文件夹结构如下:
代码:
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir=dir(maindir)
结果,输出一个7*1的struct数组:
会发现, 多了两个文件夹, 分别是 '.' 和 '..' ,被隐藏了, 在写代码的过程中一定要考虑到这两个问价夹;
此外, 以上struct中的 name, folder, 等6个属性均可以被调用, 调用格式为 subdir.name, subdir.folder等, 其中name 和 isdir最为常用
- name 顾名思义,表示文件或文件夹的名字, 例如:
subdir(3).name
则 输出为第三个文件夹的名字:
如果想要得到某个文件夹下所有的某种指定格式的文件,可以通过如下方式获得:
f = dir('E:\ACourse\大数据专题实践\LFcode\Sample_test\*.docx')
# 或者
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir = fullfile(maindir, '*.docx');
f = dir(subdir)
结果:
- isdir 则是判别该内容类型是 目录(文件夹) 还是 文件, 若是 目录(文件夹) 则返回逻辑1或True, 若是 文件 则返回逻辑值0或False. 例如:
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir = dir(maindir);
subdir(3).isdir
结果:
2. length()
- l = length(x) % 返回向量的长度, 例如:
代码:
x = ['a' 'b' 'c'];
l = length(x)
结果:
3. isequal()
- tf = isequal(A, B, ...) %如果输入数组是相同的,则tf=isequal(A, B, ...)返回逻辑1(真),否则返回逻辑0(假)。非空数组必须有相同的数据类型和大小。例如:
代码:
tf = isequal('aaa','aaa')
结果:
4. fullfile()
- f = fullfile(‘dir1’, ‘dir2’, …, ‘filename’) %fullfile构成地址字符串;
注意最后一个是filename, 要带文件名后缀 ,例如:
代码:
f = fullfile('G:\PLNet', 'Sample_test', 'raw.lfp')
输出:
-
二. 实例场景及代码
接下来, 给出一个最近遇到的实例场景及代码
1. 应用场景如下:
现在有上千张lfp格式的图片, 分别存放在PLNet下的每一个子问价夹中, 需要使用matlab批量依次对每一个lfp文件进行处理, 得到对应的bmp格式的文件,并保存在当前文件夹下
可以先将文件格式处理的过程封装成一个函数, 具体不用管, 就是一个如下样式的函数
function dataprocess(lfp文件地址, bmp文件保存地址) read , process, save 将lfp文件进行处理,并保存在当前文件夹内 实现上述功能
然后就是文件批量处理的过程, 定义一个主函数, 调用上述功能函数。
2. 具体代码如下:
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test\ss';
subdir=dir(maindir);
for i = 1:length(subdir)
if( isequal( subdir( i ).name, '.' ) || isequal( subdir( i ).name, '..' ) || ~subdir( i ).isdir ) % 如果不是目录 就跳过
continue;
end
subdirpath = fullfile(maindir, subdir(i).name, 'raw.lfp');
savepath = fullfile(maindir, subdir(i).name, 'raw.bmp')
% read , process, save 将lfp文件进行处理,并保存在当前文件夹内
% function data_process(lfp文件地址,bmp文件保存地址) 实现上述功能
dataprocess(subdirpath, savepath);
end
注意: 在定义的function dataprocess中, 一定要注意路径的问题, 不要随意改变路径, 或者随意执行打开某个文件夹的操作, 如果确实需要, 则一定记得在执行结束后要加上cd('..') 返回上级原目录的操作, 否则会出现主函数中 function dataprocess路径不对而无法找到的问题 。
参考:
https://www.cnblogs.com/smqh-bokeyuan/p/11406549.html
https://blog.csdn.net/loadqian/article/details/80656453