scipy 从子目录加载所有mat文件

xxb16uws  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(162)

我有很多.mat格式的数据。而且,我的主数据文件夹有很多子文件夹。在每个子文件夹下,我有1000个.mat数据文件。我想使用python加载所有这些文件。我正在尝试,但无法自动完成。我想帮助编写一个函数,在其中
1.它将进入每个目录,读取所有1000个数据文件,并将它们存储在一个字典中。
1.文件夹名称将给予多标签信息。例如:其中一个子文件夹名称为C1_10_300,因此它将从文件夹名称(类别、子类型1、子变量1)中创建三个单独的标签=(c1,10,300),如下所示。

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

我在这里添加了我的文件夹树图片,以及每个.mat文件

的变量的图片。
请帮助我。在此输入图像描述

ql3eal8s

ql3eal8s1#

试试这个函数--它循环遍历所有子文件夹,查找并加载.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文件。

相关问题