matlab批量读取处理文件

matlab需要读取一个文件夹下的多个子文件夹中的某种指定格式的文件,该如何批量操作呢?

  • 一. 常用函数介绍:

首先,先介绍几个matlab中常用的函数

1. dir()

Matlab使用dir函数获得指定文件夹下的所有子文件夹和文件,并存放在在一种为文件结构体数组中.
dir函数可以有调用方式为:

  • dir('.')   列出当前目录下所有子文件夹和文件
  • dir('G:\Matlab')   列出指定目录下所有子文件夹和文件
  • dir('*.m')   列出当前目录下符合正则表达式的文件夹和文件

例如:

文件夹结构如下:

matlab批量读取处理文件_第1张图片

代码:

maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir=dir(maindir)

结果,输出一个7*1的struct数组:

matlab批量读取处理文件_第2张图片 matlab批量读取处理文件_第3张图片

会发现, 多了两个文件夹, 分别是 '.''..' ,被隐藏了, 在写代码的过程中一定要考虑到这两个问价夹;

此外, 以上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)

结果:

matlab批量读取处理文件_第4张图片 

  • isdir 则是判别该内容类型是 目录(文件夹) 还是 文件, 若是 目录(文件夹) 则返回逻辑1或True, 若是 文件 则返回逻辑值0或False. 例如:
maindir = 'E:\ACourse\大数据专题实践\LFcode\Sample_test';
subdir = dir(maindir);
subdir(3).isdir

 结果:

matlab批量读取处理文件_第5张图片

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')

 结果:

matlab批量读取处理文件_第6张图片

4. fullfile()

  • f = fullfile(‘dir1’, ‘dir2’, …, ‘filename’) %fullfile构成地址字符串;

注意最后一个是filename, 要带文件名后缀 ,例如:

代码:

f = fullfile('G:\PLNet', 'Sample_test', 'raw.lfp')

输出: 

  • 二. 实例场景及代码

接下来, 给出一个最近遇到的实例场景及代码

1. 应用场景如下:

现在有上千张lfp格式的图片, 分别存放在PLNet下的每一个子问价夹中, 需要使用matlab批量依次对每一个lfp文件进行处理, 得到对应的bmp格式的文件,并保存在当前文件夹下

matlab批量读取处理文件_第7张图片matlab批量读取处理文件_第8张图片

可以先将文件格式处理的过程封装成一个函数, 具体不用管, 就是一个如下样式的函数

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

https://blog.csdn.net/qq_18343569/article/details/50960254

https://www.cnblogs.com/Terrypython/p/9496879.html

你可能感兴趣的:(matlab,matlab)