我需要使用 Matlab 列出文件夹内的子文件夹。如果我使用
nameFolds = dir(pathFolder),
我得到.
和..
+ 子文件夹名称。然后我必须跑nameFolds(1) = []
两次。有没有更好的方法来使用 Matlab 获取子文件夹名称?谢谢。
使用输出isdir
字段dir
来分隔子目录和文件:
d = dir(pathFolder);
isub = [d(:).isdir]; %# returns logical vector
nameFolds = {d(isub).name}';
然后,您可以删除.
并..
nameFolds(ismember(nameFolds,{'.','..'})) = [];
您不应该这样做nameFolds(1:2) = []
,因为dir
根目录的输出不包含那些点文件夹。至少在 Windows 上。
这更流畅,而且都是一行:
dirs = regexp(genpath(parentdir),['[^;]*'],'match');
解释:
是一个命令,它在一行文本中genpath()
吐出所有子文件夹,用分号分隔。parentdir
正则表达式函数regexp()
在该字符串中搜索模式并返回选项:'matches' 到模式。在这种情况下,模式是任何不是分号的字符 = `[^;],连续重复一次或多次 = *。所以这将搜索字符串并将所有不是分号的字符分组到单独的输出中 - 在这种情况下是所有子文件夹目录。
以下代码片段仅返回子文件夹的名称。
% `rootDir` is given
dirs = dir(rootDir);
% remove `.` and `..`
dirs(1:2) = [];
% select just directories not files
dirs = dirs([obj.dirs.isdir]);
% select name of directories
dirs = {dirs.name};
为了有效地重用在不同场景中提供的第一个解决方案,我从中制作了一个功能:
function [ dirList ] = get_directory_names( dir_name )
%get_directory_names; this function outputs a cell with directory names (as
%strings), given a certain dir name (string)
%from: http://stackoverflow.com/questions/8748976/list-the-subfolders-
%in-a-folder-matlab-only-subfolders-not-files
dd = dir(dir_name);
isub = [dd(:).isdir]; %# returns logical vector
dirList = {dd(isub).name}';
dirList(ismember(dirList,{'.','..'})) = [];
end