matlab 文件夹操作

今天处理实验室拍图的数据, 因为主体的流程是用matlab编写的, 拍的图片文件格式也相对比较固定, 就需要我们写一个接口, 将文件中的数据提取出来, 转化为一个主体程序接受的数据格式, 这就涉及到了matlab 的文件夹操作了。
因为好久没写这样的代码了, 有些生疏, 不过还好比较简单, 这里做一个比较浅显的小结。
主要用到了 isdir, dir, strncmp, load 这么几个函数, 用matlab 的帮助doc 指令可以很容易得到他们的使用方法。

下面给出, 我们读取文件夹下二级目录内特定文件内数据的方法

%% 给定图片文件夹的路径, 获取每个子文件夹中的 Rt.txt 文件的内容, 并加入矩阵中
% @params : path 输入文件夹路径
% @return : rtl left 文件夹中的Rt.txt 内容的集合体
% rtr right 文件夹中Rt.txt 内容的集合体
% @description: 文件夹结构是分为 left, right 两个子文件夹, 子文件夹中分别有1~n的子文件夹
% 在这些二级文件夹下有一个 Rt.txt 文件, 这个是我们关注的对象。
% @author : zhyh2010
% @date : 20160320
% @version: version 1.0
%
function [rtl, rtr] = getRTALL(path)
    tf = isdir(path);
    assert(tf == true, [path, ' 输入路径必须是一个合法的文件夹路径']);

    rtl = getRT([path, '\\left']);
    rtr = getRT([path, '\\right']);    
% errl = getErr([path, '\\left'], 0.1);
% errr = getErr([path, '\\right'], 0.1);
end

% 获取left / right 文件夹下的 RTALL 的集合数据
function [rt] = getRT(path)
    tf = isdir(path);
    assert(tf == true, [path, ' 输入路径必须是一个合法的文件夹路径']);

    listing = dir(path);
    rt = [];
    for ii = 1 : length(listing)
        % 如果遍历的对象不是文件夹, 或者 是 . / .. 不处理
        if (listing(ii).isdir == 0 || strncmp(listing(ii).name, '.', 1) == 1)
            continue;
        end

        subpath = [path, '\\', listing(ii).name, '\\Rt.txt'];
        rt_tmp = load(subpath);
        rt = [rt; rt_tmp];
    end
end

% 获取left / right 文件夹下的 error.txt 的 超过 error_level 的 集合数据
function [err_set] = getErr(path, err_level)
    tf = isdir(path);
    assert(tf == true, [path, ' 输入路径必须是一个合法的文件夹路径']);

    listing = dir(path);
    err_set = [];
    for ii = 1 : length(listing)
        % 如果遍历的对象不是文件夹, 或者 是 . / .. 不处理
        if (listing(ii).isdir == 0 || strncmp(listing(ii).name, '.', 1) == 1)
            continue;
        end

        % 取出最后一行的 error 统计数据, 如果超过 error_level 就将他取出来
        subpath = [path, '\\', listing(ii).name, '\\error.txt'];
        err_set_tmp = load(subpath);
        % 文件中的最后一行数据是 平均值
        data.data = err_set_tmp(end);
        data.name = listing(ii).name;
        if data.data >= err_level
            err_set = [err_set; data];
        end
    end
end





你可能感兴趣的:(matlab)