Come posso ottenere un elenco di tutti i nomi delle directory e/o di tutti i file in una directory specifica in MATLAB?
-
28-10-2019 - |
Domanda
Ci sono due cose che voglio fare:
- Ottieni un elenco di tutti i nomi delle directory all'interno di una directory e
- 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.
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