Come posso ottenere un elenco di tutti i nomi delle directory e/o di tutti i file in una directory specifica in MATLAB?

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

  •  28-10-2019
  •  | 
  •  

Domanda

Ci sono due cose che voglio fare:

  1. Ottieni un elenco di tutti i nomi delle directory all'interno di una directory e
  2. Ottieni un elenco di tutti i nomi dei file all'interno di una directory

Come posso farlo in matlab?

In questo momento, sto provando:

dirnames = dir(image_dir);

Ma questo restituisce un elenco di oggetti, credo. size(dirnames) restituisce il numero di attributi e dirnames.name Restituisce solo il nome della prima directory.

È stato utile?

Soluzione

La funzione Dir restituisce effettivamente a Array di struttura con un elemento struttura per file o sottodirectory nella directory data. quando Ottenere dati da un array di struttura, accedere a un campo con notazione punto restituirà a Elenco separato da virgole dei valori di campo con un valore per elemento struttura. Questo elenco separato da virgola può essere raccolto in un vettore posizionandolo tra parentesi quadrate [] o a array di cellule posizionandolo in parentesi graffe ricci {}.

Di solito mi piace ottenere un elenco di nomi di file o sottodirectory in una directory utilizzando indicizzazione logica, così:

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

Altri suggerimenti

No. Non sei corretto su ciò che restituisce Dirnames.Name.

D = dir;

Questo è un array di struttura. Se vuoi un elenco di cui sono directory, fallo

isdirlist = find(vertcat(D.isdir));

Oppure avrei potuto usare Cell2Mat qui. Si noti che se si prova solo D.name, restituisce un elenco separato da virgola. Tuttavia, puoi ottenere tutti i nomi come un array di celle.

nameslist = {D.name};

Supponendo che "Image_dir" sia il nome di una directory, il seguente codice mostra come determinare quali elementi sono directory e quali sono file e come ottenere i loro nomi. Una volta arrivato così lontano, costruire un elenco di solo directory o solo file è semplice.

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
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top