How can I remove . and ..
現在この質問をフォロー中です
- フォローしているコンテンツ フィードに更新が表示されます。
- コミュニケーション基本設定に応じて電子メールを受け取ることができます。
エラーが発生しました
ページに変更が加えられたため、アクションを完了できません。ページを再度読み込み、更新された状態を確認してください。
古いコメントを表示
clear all
clc
sad = dir('D:\Project\DB1\test\'); % Returns both folders and files
% sad = dir(pwd); % Returns both folders and files
cell_array_of_folder_names = {sad([sad.isdir]).name}; % Select folder names
% cell_array_of_folder_names( strncmp( cell_array_of_folder_names, ".", 1 ) ) = []; % Remove '.' and '..'
sorted_cell_array_of_folder_names = sort_nat( cell_array_of_folder_names );
% sorted_cell_array_of_folder_names = cell_array_of_folder_names; % if you don't have sort_nat
whos sorted_cell_array_of_folder_names
%----------------
[mp1, np] = size(sorted_cell_array_of_folder_names); % compute size = number of subfolders & files & . & ..
csf1=0; % counter of JUST subfolders found in PF
t=1;
Group_Test1 = zeros(1, mp1);
for i=1:mp1
% Skip . and ..
if endsWith(sorted_cell_array_of_folder_names{i}, '.') || endsWith(sorted_cell_array_of_folder_names{i}, '..')
% Skip . and ..
continue; % Skip to bottom of loop.
end
% Keep only folders:
csf1 = csf1 +1; % one sub folder found
SFN = sorted_cell_array_of_folder_names(i).name ;% extract his name
tifList = ls(sprintf('%s%s%s%s',PF,SFN,'\','*.tif')); % list all jpg files
[ms1, ns] = size(tifList); % ms = number of image files found
% Processing for each tif file:
for j=1:ms1
tifFileName = tifList(j,:); % extract name of tif file
% IM=imread([PF SFN '\' tifFileName]);
%t=1;
%for i=1:csf1
% for j=1:ms1
Group_Test1(t)={i};
t=t+1;
end
PF_SFN_imgName = sprintf('%s%s%s',PF,SFN,'\',tifFileName);
end
Group_Test1 = Group_Test1(1:t-1); % Crop off any unused elements
save('Group_Test','Group_Test1');
%----------------------

1 件のコメント
Stephen23
2021 年 5 月 28 日
Tip: use FULLFILE to join strings into one filepath, rather than SPRINTF or string concatenation.
採用された回答
Stephen23
2021 年 5 月 28 日
Replace
{sad([sad.isdir]).name}
with
setdiff({sad([sad.isdir]).name},{'..','.'})
17 件のコメント
Walter Roberson
2021 年 5 月 28 日
Note that in theory using setdiff() like that could reorder the files. In practice it is unlikely to reorder the files (not impossible though.)
Stephen23
2021 年 5 月 28 日
Given that the order returned by DIR is not specified, I don't see how that makes much difference.
sun rise
2021 年 5 月 28 日
Name Size Bytes Class Attributes
sorted_cell_array_of_folder_names 1x937 110350 cell
Dot indexing is not supported for variables of this type.
Error in Untitled (line 24)
SFN = sorted_cell_array_of_folder_names(i).name ;% extract his name
>>
sun rise
2021 年 5 月 28 日
This error after changes
Walter Roberson
2021 年 5 月 28 日
Replace
SFN = sorted_cell_array_of_folder_names(i).name ;% extract his name
with
SFN = sorted_cell_array_of_folder_names{i} ;% extract his name
Walter Roberson
2021 年 5 月 28 日
In context the hypothetical reordering of setdiff() is irrelevant anyhow because the nat sort is done right afterwards ;-)
sun rise
2021 年 5 月 28 日
It does not enter the for j loop, so Group_Test1 is empty
sun rise
2021 年 5 月 28 日

Walter Roberson
2021 年 5 月 28 日
Do you still have
if endsWith(sorted_cell_array_of_folder_names{i}, '.') || endsWith(sorted_cell_array_of_folder_names{i}, '..')
if so then you can remove that test and the continue, since you already filtered out . and ..
sun rise
2021 年 5 月 28 日

Walter Roberson
2021 年 5 月 28 日
I recommend that you rewrite
tifList = ls(sprintf('%s%s%s%s',PF,SFN,'\','*.tif')); % list all jpg files
in terms of dir() and fullfile()
I do not see where you have defined PF ?
Is there a reason you are not using
PF = 'D:\Project\DB1\test';
sad = dir(fullfile(PF, '*', '*.tif'));
cell_array_of_file_names = fullfile({sad.folder}, {sad.name});
and then cell_array_of_file_names would be the complete list of all .tif files that are one folder level down from DB1\test ?
sun rise
2021 年 5 月 28 日
I want to order each folder separately and give all the pictures in it the same name or label
sun rise
2021 年 5 月 28 日
First the folders are arranged, then all the pictures inside the folder are named with the same name. For example: The pictures in Volume 1 are all named with Name 1 ... and so on ...
Walter Roberson
2021 年 5 月 28 日
[folders, basenames, ext] = fileparts(cell_array_of_file_names);
G = findgroups(folders);
[~, labels, ~] = fileparts(folders);
Now you for each entry cell_array_of_file_names{K} then its associated label is labels{K} and you can process all members of the same folder by processing
maxG = max(G);
for fidx = 1 : maxG
matches = find(G == fidx);
these_entries = cell_array_of_file_names(matches);
this_label = labels{matches(1)};
%these_entries is a cell array containing only file names
%that are all part of the same folder, and the folder name
%is in this_label
end
sun rise
2021 年 5 月 28 日
clear all
clc
sad = dir('D:\Project\DB1\test\'); % Returns both folders and files
cell_array_of_folder_names = {sad([sad.isdir]).name}; % Select folder names
cell_array_of_folder_names( strncmp( cell_array_of_folder_names, ".", 1 ) ) = []; % Remove '.' and '..'
folder_names = sort_nat( cell_array_of_folder_names );
%----------------
[folders, basenames, ext] = fileparts(cell_array_of_folder_names);
G = findgroups(folders);
[~, labels, ~] = fileparts(folders);
maxG = max(G);
for fidx = 1 : maxG
matches = find(G == fidx);
these_entries = folder_names(matches);
this_label = labels{matches(1)};
%these_entries is a cell array containing only file names
%that are all part of the same folder, and the folder name
%is in this_label
end
%save('Group_Test','Group_Test1');
%----------------------
Error using fileparts (line 37)
Input must be a row vector of characters or string scalar.
Error in Untitled3 (line 9)
[folders, basenames, ext] = fileparts(cell_array_of_folder_names);
>>
Walter Roberson
2021 年 5 月 28 日
if ispc()
PF = fullfile('D:\Project\DB1\test\', '*', '*.tif');
else
%for demonstration purposes ONLY.
%MATLAB Answers does not have nat_sort installed, so install it
td = tempname;
mkdir(td);
tz = [td '.zip'];
urlwrite('https://www.mathworks.com/matlabcentral/mlc-downloads/downloads/submissions/10959/versions/4/download/zip/sort_nat.zip', tz);
unzip(tz, td)
addpath(td)
%now point us to a directory we know that some tif files are in
PF = fullfile( fileparts(fileparts(which('cameraman.tif'))), '**', '*.tif');
end
sad = dir(PF); % Returns files only
cell_array_of_file_names = fullfile({sad.folder}, {sad.name});
[folders, basenames, ext] = fileparts(cell_array_of_file_names);
G = findgroups(folders);
[~, labels, ~] = fileparts(folders);
Groups = struct();
maxG = max(G);
for fidx = 1 : maxG
matches = find(G == fidx);
these_entries = cell_array_of_file_names(matches);
these_entries = sort_nat( these_entries );
this_label = labels{matches(1)};
%these_entries is a cell array containing only file names
%that are all part of the same folder, and the folder name
%is in this_label
Groups.(this_label) = these_entries;
end
Groups
Groups = struct with fields:
imdata: {1×33 cell}
Groups.(this_label).'
ans = 33×1 cell array
{'/MATLAB/toolbox/images/imdata/AT3_1m4_01.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_02.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_03.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_04.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_05.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_06.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_07.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_08.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_09.tif'}
{'/MATLAB/toolbox/images/imdata/AT3_1m4_10.tif'}
{'/MATLAB/toolbox/images/imdata/autumn.tif' }
{'/MATLAB/toolbox/images/imdata/board.tif' }
{'/MATLAB/toolbox/images/imdata/cameraman.tif' }
{'/MATLAB/toolbox/images/imdata/canoe.tif' }
{'/MATLAB/toolbox/images/imdata/cell.tif' }
{'/MATLAB/toolbox/images/imdata/circbw.tif' }
{'/MATLAB/toolbox/images/imdata/circuit.tif' }
{'/MATLAB/toolbox/images/imdata/eight.tif' }
{'/MATLAB/toolbox/images/imdata/forest.tif' }
{'/MATLAB/toolbox/images/imdata/hotcoffee.tif' }
{'/MATLAB/toolbox/images/imdata/kids.tif' }
{'/MATLAB/toolbox/images/imdata/logo.tif' }
{'/MATLAB/toolbox/images/imdata/m83.tif' }
{'/MATLAB/toolbox/images/imdata/mandi.tif' }
{'/MATLAB/toolbox/images/imdata/moon.tif' }
{'/MATLAB/toolbox/images/imdata/mri.tif' }
{'/MATLAB/toolbox/images/imdata/paper1.tif' }
{'/MATLAB/toolbox/images/imdata/pout.tif' }
{'/MATLAB/toolbox/images/imdata/shadow.tif' }
{'/MATLAB/toolbox/images/imdata/spine.tif' }
sun rise
2021 年 5 月 31 日
>> Untitled3
Error using fileparts (line 37)
Input must be a row vector of characters or string scalar.
Error in Untitled3 (line 21)
[folders, basenames, ext] = fileparts(cell_array_of_file_names);
>>
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Scope Variables and Generate Names についてさらに検索
参考
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)
