【问题标题】:How to extract and load all .mat files from subfolders with different names如何从具有不同名称的子文件夹中提取和加载所有 .mat 文件
【发布时间】:2017-08-04 08:28:24
【问题描述】:

我的目标是从单个目录加载所有.mat 文件。

假设我感兴趣的文件名为 data.mat,位于 ('C:\Users\Owner\Desktop\Experiment1) 目录中。

问题是子文件夹“Experiment1”包含更多子文件夹(例如,('C:\Users\Owner\Desktop\Experiment1\Subject1\January1\data.mat),我希望 Matlab 绕过子文件夹并从 Experiment1 中提取所有“data.mat 文件”。

这可能吗?如果是这样,我该怎么做?

这是我当前的脚本:

mainFolder = dir('C:\Users\Owner\Desktop\Experiment1');
for i = 1:numel(mainFolder)
    eval(['data_',num2str(i)]) = load('data.mat');
end

谢谢!

【问题讨论】:

  • 是的,它们都有相同的名称('data.mat')。我将在加载结构时重命名它们。
  • 对不起,谢谢。
  • 里面有没有子类目录,比如前缀'+'或者'@'?
  • 我不知道。我怎样才能找到这个?
  • 您会在文件资源管理器(Windows 资源管理器?)中看到这个。我不确定您的子路径是否与 MATLAB 代码或类混合在一起,但听起来情况并非如此。给我几分钟,我会整理一个答案供你尝试。

标签: matlab directory


【解决方案1】:

您可以使用dir,如果您包含** 通配符,它​​将递归搜索。

例如:

datafiles = dir(fullfile(pathname, '**', 'data.mat'))
for ii = 1:length(datafiles)
    tmp = load(fullfile(datafiles(ii).folder, datafiles(ii).name));

    datastr = sprintf('data_%u', ii);  % Generate data string
    data.(datastr) = tmp
end

【讨论】:

  • 嗯,这没有出现在我的测试用例中(MATLAB R2014)。也就是说,当我尝试运行它时,数据文件是空的,即使路径名与“data.mat”文件位于同一目录中。有unix/windows的区别吗?这将是一个更好的解决方案。
  • 这样就更好了! (+1)
  • Archaic matlab 用户(又名。R2016b 之前),您可以使用此函数 subdir 替换上述@excaza 代码中的 dir。这是链接:mathworks.com/matlabcentral/fileexchange/…再次感谢您的帮助!
猜你喜欢
  • 2021-06-09
  • 2019-05-29
  • 2014-07-30
  • 1970-01-01
  • 2023-02-03
  • 1970-01-01
  • 2013-07-17
  • 2020-07-17
  • 2014-04-25
相关资源
最近更新 更多