Как я могу получить список всех имен каталогов и/или всех файлов в определенном каталоге в Matlab?
-
28-10-2019 - |
Вопрос
Есть две вещи, которые я хочу сделать:
- Получите список всех имен каталогов в каталоге, и
- Получите список всех имен файлов в каталоге
Как я могу сделать это в Matlab?
Прямо сейчас я пытаюсь:
dirnames = dir(image_dir);
Но это возвращает список объектов, я думаю. size(dirnames)
возвращает количество атрибутов и dirnames.name
только возвращает имя первого каталога.
Решение
Функция Режиссер на самом деле возвращает структура массив с одним элементом структуры на файл или подкаталог в данном каталоге. Когда Получение данных из массива структуры, доступ к полю с точечной нотацией Список с запятой значений поля с одним значением на элемент структуры. Этот разделенный запятой список может быть Собран в вектор Поместив его в квадратные скобки []
или клеточный массив Поместив его в кудрявые брекеты {}
.
Обычно мне нравится получать список имен файлов или подкаталога в каталоге, используя логическая индексация, вот так:
dirInfo = dir(image_dir); %# Get structure of directory information
isDir = [dirInfo.isdir]; %# A logical index the length of the
%# structure array that is true for
%# structure elements that are
%# directories and false otherwise
dirNames = {dirInfo(isDir).name}; %# A cell array of directory names
fileNames = {dirInfo(~isDir).name}; %# A cell array of file names
Другие советы
Нет. Вы неправильно относитесь к тому, что возвращает Dirnames.name.
D = dir;
Это структура массива. Если вы хотите список, которые являются каталогами, сделайте это
isdirlist = find(vertcat(D.isdir));
Или я мог бы использовать Cell2mat здесь. Обратите внимание, что если вы просто попробуете D.Name, это возвращает список запятой. Вы можете просто получить все имена в качестве массива ячеек.
nameslist = {D.name};
Предполагая, что «image_dir» является именем каталога, следующий код показывает вам, как определить, какие элементы являются каталогами, а какие - файлы, и как получить их имена. Как только вы получите так далеко, составление списка только каталогов или только файлов проста.
dirnames = dir(image_dir);
for(i = 1:length(dirnames))
if(dirnames(i).isdir == true)
% It's a subdirectory
% The name of the subdirectory can be accessed as dirnames(i).name
% Note that both '.' and '..' are subdirectories of any directory and
% should be ignored
else
% It's a filename
% The filename is dirnames(i).name
end
end