Matlab 如何获取子文件夹或子子文件夹目录名与目录下文件名 及其文件名判断

来源

做实验,实验数据分了二级目录,及子子文件夹。数据放在子子文件夹内。想实现怎么在根目录数据分析,绘图,出图。还想初步分析数据,一次浏览所有实验的初步数据,比如设一个指标,对相同和不同类别实验数据进行浏览,选择出每种实验添加下的最好数据进行绘图。

根目录下获取一级分类目录

根目录下只有实验的一级分类目录,没有其他文件。
下面这段代码拷贝自 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

获取二级目录子子文件夹名

  1. 当然可以用 cd切换工作目录在用一次上面获取子文件夹的方法,但是调试容易切换工作目录后程序终止,工作目录没有奇幻回去。
  2. 直接获取滋滋文件夹代码如下:
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;
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值