您的位置:首页 > 编程语言 > MATLAB

matlab 文件夹操作

2016-03-21 11:15 946 查看
今天处理实验室拍图的数据, 因为主体的流程是用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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: