Загрузить все файлы матов из подкаталогов - PullRequest
0 голосов
/ 05 апреля 2020

У меня много данных в формате .mat. Кроме того, в моей основной папке данных есть много подпапок. В каждой подпапке у меня есть 1000 файлов данных .mat. Я хочу загрузить их все, используя python. Я пытаюсь, но не могу сделать это автоматически. Мне нужна помощь, чтобы написать функцию, в которой

  1. Она будет go в каждый каталог, и прочитает все 1000 файлов данных и сохранит их в одном словаре. Все подпапки находятся в папке с именем Dataset
  2. Имя папки даст мне информацию о нескольких метках. Например: одно из имен подпапок - C1_10_300, поэтому из имени папки (категория, подтип 1, подвар 1) = (c1,10, 300) будет сделано три отдельных метки.

Примечание: каждый файл .mat имеет две отдельные записи: signal и fs. Я только хочу рассмотреть файл сигнала.

Я добавляю свое дерево папок и фотографию переменных каждого файла .mat enter image description here здесь.

Пожалуйста, помогите мне. введите описание изображения здесь

enter image description here

1 Ответ

1 голос
/ 05 апреля 2020

попробуйте эту функцию - это l oop по всем подпапкам, найдите и загрузите файлы .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'), чтобы загрузить только переменную сигнала; если есть определенные c шаблоны имен файлов, которые вы хотите сопоставить, измените вызов regexp внизу. в настоящее время он соответствует всем файлам .mat.

...