我想创建3个列表,其中包含以png,jpg和bmp开头的文件名。所有文件都是目录树中的图像:/ year_month / year_month_day /,如下所示:
./ 20160203 / 20160203_png01_test1.png.tmp
./ 20160203 / 20160203_jpg01_test2.jpg.tmp
./ 20160203 / 20160203_bmp01_test3.bmp.tmp
./ 20160204 / 20160204_png01_test1.png.tmp
./ 20160204 / 20160204_jpg01_test2.jpg.tmp
./ 20160204 / 20160204_bmp01_test3.bmp.tmp
./ 20160205 / 20160205_png01_test1.png.tmp
./ 20160205 / 20160205_jpg01_test2.jpg.tmp
./ 20160205 / 20160205_bmp01_test3.bmp.tmp
每个列表应包含每个扩展名(jpg,bmp和png)的图片名称,例如list1应具有:
./ 20160203 / 20160203_png01_test1.png.tmp
./ 20160204 / 20160204_png01_test1.png.tmp
./ 20160205 / 20160205_png01_test1.png.tmp
list2应该有:
./ 20160203 / 20160203_jpg01_test2.jpg.tmp
./ 20160204 / 20160204_jpg01_test2.jpg.tmp
./ 20160205 / 20160205_jpg01_test2.jpg.tmp
和list3相同,但有bmp ......
我的代码看起来像这样:
workdir = '/home/user/201602/';
cd(workdir);
command = ['find -name *test*.tmp'];
[status,cmdout] = system(command);
c = strsplit(strtrim(cmdout));
n_files = length(c);
format_id = cell(n_files,1);
for ifile =1:n_files
d = textscan(c{ifile},'%s%s', 'Delimiter','_');
s1 = d{2}{:};
format_id{ifile} = s1;
end
format_id = unique(format_id);
nformat = length(format_id);
for iformat = 1:nformat
templist = [format_id{iformat} '.dat'];
fid = fopen(templist,'w');
for ifiles =1:n_files
fprintf(fid, '%6s\n', c{iformat});
end
fid = fclose(fid);
end
我得到了列表:png01.dat,jpg01.dat和bmp01.dat这很好,但在每个列表中我都有图片的所有名称,而不仅仅是具有相应扩展名的名称。首先,我想制作一个"索引"为了只选择具有相应扩展名(bmp jpg和png)的文件,然后将它们发送到列表。我怎么能这样做?
我希望问题很清楚。在此先感谢您的帮助。
答案 0 :(得分:0)
像这样存储扩展名:
extensions = {'.bmp', '.jpg', '.png'}
然后,您可以访问extensions{1}
,这将返回“.bmp”。通过使用带迭代器i
的循环,您可以检索所有extensions{i}
,直到到达列表末尾:length(extensions)
。
用作选择器:
command = [strcat('find -name *test*', extensions{1}, '.tmp')];
答案 1 :(得分:0)
根据@Matt的建议,考虑使用dir
函数而不是system
这是不可移植的:
workdir = '/home/user/201602/';
jpg_files = dir( fullfile(workdir, '*.jpg.tmp') );
png_files = dir( fullfile(workdir, '*.png.tmp') );
bmp_files = dir( fullfile(workdir, '*.bmp.tmp') );