从子目录加载所有mat文件

问题描述 投票:-2回答:1

我有很多.mat格式的数据。此外,我的主数据文件夹有很多子文件夹。在每个子文件夹下,我都有1000个.mat数据文件。我想使用python加载所有这些。我正在尝试,但是无法自动执行。我需要帮助来编写一个函数,其中

  1. 它将转到每个目录,并读取所有1000个数据文件,然后将它们存储在一个字典中。所有子文件夹都放在一个文件夹中称为数据集
  2. 文件夹名称将为我提供多个标签信息。如:其中之一子文件夹的名称为C1_10_300,因此它将创建三个单独的标签来自文件夹名称(类别,子类型1,子变量1)=(c1,10,300)这样。

NB:每个.mat文件都有两个单独的条目:signal和fs。我只想考虑信号文件。

我将在其中添加文件夹树图片以及每个.mat文件enter image description here的变量的图片。

请帮助我。在此处输入图像描述

enter image description here

python-3.x matlab directory scipy numpy-ndarray
1个回答
0
投票

尝试此功能-它遍历所有子文件夹,查找并加载.mat文件,并将其加载到结构中,该结构将每个文件夹和文件名组织为子字段。

function data=loadmatfromdir(rootdir)
fd=dir(rootdir);
data=struct();
for i=1:length(fd)
    fname=[fd(i).folder filesep fd(i).name];
    if(fd(i).isdir && isempty(regexp(fd(i).name,'^\.{1,2}$', 'once')))
        data.(genvarname(fd(i).name))=loadmatfromdir(fname);
    elseif(regexp(fd(i).name,'\.[Mm][Aa][Tt]'))
        data.(genvarname(fd(i).name))=load(fname);
    end
end

如果您要从.mat文件而不是所有变量中加载特定的变量,请修改load(..)以添加变量名称-例如,调用load(fname,'signal')仅加载信号变量;如果要匹配特定的文件名模式,请在底部修改regexp调用。当前它与所有.mat文件匹配。

© www.soinside.com 2019 - 2024. All rights reserved.