来源
做实验,实验数据分了二级目录,及子子文件夹。数据放在子子文件夹内。想实现怎么在根目录数据分析,绘图,出图。还想初步分析数据,一次浏览所有实验的初步数据,比如设一个指标,对相同和不同类别实验数据进行浏览,选择出每种实验添加下的最好数据进行绘图。
根目录下获取一级分类目录
根目录下只有实验的一级分类目录,没有其他文件。
下面这段代码拷贝自 matlab answers 的问答题 Is there any way to list all folders ONLY in the level directly below a selected directory?
function [subDirsNames] = GetSubDirsFirstLevelOnly(parentDir)
% Get a list of all files and folders in this folder.
files = dir(parentDir);
% Get a logical vector that tells which is a directory.
dirFlags = [files.isdir];
% Extract only those that are directories.
subDirs = files(dirFlags); % A structure with extra info.
% Get only the folder names into a cell array.
% subDirsNames = {subDirs(3:end).name};
% Get only the folder names into a structure array.
subDirsNames = subDirs(3:end);
end
获取二级目录子子文件夹名
- 当然可以用
cd
切换工作目录在用一次上面获取子文件夹的方法,但是调试容易切换工作目录后程序终止,工作目录没有奇幻回去。 - 直接获取滋滋文件夹代码如下:
addpath(genpath('./')); % 把根目录下所有文件加入matlab path,matlab退出会自己删除,也可以在脚本末尾加上 rmpath(genpath('./')) 手动删除他们
parent_folder = GetSubDirsFirstLevelOnly(pwd); % 根目录下的一级目录文件夹名
for K = 1:length(parent_folder)
folders = GetSubDirsFirstLevelOnly( parent_folder(K).name ); % 根目录下的二级子子文件夹名
for i = 1:length(folders)
path = [folders(i).folder,'\',folders(i).name]; %构建path路径
listing = dir(path); % 获取路径下的文件列表
listing = listing(3:end); % 删除 前两个,根目录和返回上一级目录
listing = { listing(:).name }; %获取所有文件名
listing = string(listing); % 元胞数组转string
TF = contains(listing, 'your_selected_file'); % 从文件名中找出需要的文件
% 数据处理过程,自定义
end
end
rmpath(genpath('./'))
从文件名称中提取信息
一般在实验数据存储的 mat 文件命名时,特意将实验条件缩写放在名字中,现在可以直接从名字中知道实验的条件了。
Exp_Name = split( folders(i).name, '_'); % 实验数据命名时有下换线分开实验条件
% Exp_Name( contains(Exp_Name, 'A') );
data(k).current = str2num( Exp_Name{ contains(Exp_Name, 'A') }(1:end-1) );
data(k).flowrate = str2num( Exp_Name{ contains(Exp_Name, 'L') }(1:end-1) );
data(k).coolant_temperature = str2num( Exp_Name{ contains(Exp_Name, 'deg') }(1:end-4) );
data(k).ExpResult= ExpResult;