我的结构如下所示:
我有一个包含database
的{{1}}文件夹。每个brands
由brand
和logo
组成。
我想遍历所有query
中的所有文件(file_1
到file_n
),并对它们执行一些操作。
我写了这段代码:
database
代码正常,它遍历所需的文件。 但是,代码有点难看和混乱。
我想知道我能否以更好的方式做到这一点?
答案 0 :(得分:1)
遍历一组目录就像你正在做的那样。但是,有些东西你可以做得更容易/我会做的不同:
brandsFolders = dir(database);
brandsFolders( ~[brandsFolders.isdir] | strcmp({brandsFolders.name},'.') | strcmp({brandsFolders.name},'..')) = [];
for ii=1:numel(brandsFolders)
logoAndQuery = dir(fullfile(database,brandsFolders(ii).name));
logoAndQuery( ~[logoAndQuery.isdir] | strcmp({logoAndQuery.name},'.') | strcmp({logoAndQuery.name},'..')) = [];
logo = fullfile(databasecurrentBrand,brandsFolders(ii).name), logoAndQuery(1).name);
files = dir(logo);
files(strcmp({files.name},'.') | strcmp({files.name},'..'))=[];
for jj=1:numel(files)
%operations on each files(j).name
end
end
(当然,只有在您确定logoAndQuery(1)
始终是'徽标'目录时才有效。)
或者使用子功能进行目录查询:
function dirs = getDirs(strPath)
dirs = dir(strPath);
dirnames = {dirs.name};
dirs ( ~[dirs.isdir] | strcmp(dirnames ,'.') | strcmp(dirnames ,'..')) = [];
end
它为您提供了一些较短的代码并给出了以下内容,其中我还假设'logo'目录中没有目录:
brandsFolders = getDirs(database);
for ii=1:numel(brandsFolders)
logoAndQuery = getDirs(fullfile(database,brandsFolders(ii).name));
logo = fullfile(databasecurrentBrand,brandsFolders(ii).name), logoAndQuery(1).name);
files = dir(logo);
files([files.isdir])=[];
for jj=1:numel(files)
%operations on each files(j).name
end
end