Как я могу получить список всех имен каталогов и/или всех файлов в определенном каталоге в Matlab?

StackOverflow https://stackoverflow.com/questions/4869188

  •  28-10-2019
  •  | 
  •  

Вопрос

Есть две вещи, которые я хочу сделать:

  1. Получите список всех имен каталогов в каталоге, и
  2. Получите список всех имен файлов в каталоге

Как я могу сделать это в 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top