matlab需要读取一个文件夹下的多个子文件夹中的某种指定格式的文件,该如何批量操作呢?
首先,先介绍几个matlab中常用的函数
Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中.
dir函数可以有调用方式为:
例如:
文件夹结构如下:
代码:
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir=dir(maindir)
结果,输出一个7*1的struct数组:
会发现, 多了两个文件夹, 分别是 '.' 和 '..' ,被隐藏了, 在写代码的过程中一定要考虑到这两个问价夹;
此外, 以上struct中的 name, folder, 等6个属性均可以被调用, 调用格式为 subdir.name, subdir.folder等, 其中name 和 isdir最为常用
subdir(3).name
则 输出为第三个文件夹的名字:
如果想要得到某个文件夹下所有的某种指定格式的文件,可以通过如下方式获得:
f = dir('E:\ACourse\大数据专题实践\LFcode\Sample_test\*.docx')
# 或者
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir = fullfile(maindir, '*.docx');
f = dir(subdir)
结果:
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir = dir(maindir);
subdir(3).isdir
结果:
代码:
x = ['a' 'b' 'c'];
l = length(x)
结果:
代码:
tf = isequal('aaa','aaa')
结果:
注意最后一个是filename, 要带文件名后缀 ,例如:
代码:
f = fullfile('G:\PLNet', 'Sample_test', 'raw.lfp')
输出:
接下来, 给出一个最近遇到的实例场景及代码
现在有上千张lfp格式的图片, 分别存放在PLNet下的每一个子问价夹中, 需要使用matlab批量依次对每一个lfp文件进行处理, 得到对应的bmp格式的文件,并保存在当前文件夹下
可以先将文件格式处理的过程封装成一个函数, 具体不用管, 就是一个如下样式的函数
function dataprocess(lfp文件地址, bmp文件保存地址) read , process, save 将lfp文件进行处理,并保存在当前文件夹内 实现上述功能
然后就是文件批量处理的过程, 定义一个主函数, 调用上述功能函数。
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
https://blog.csdn.net/qq_18343569/article/details/50960254
https://www.cnblogs.com/Terrypython/p/9496879.html