loop over branch of subfolders to copy files, without pattern in file name, in folders with specific name scheme

8 visualizaciones (últimos 30 días)
Hi everyone,
this will be a complex task.
I have following structure of folder and subfolders: starting with "movie":
Timepoint_1 many tif-files ...
2019_1 3245 Timepoint_2 *.tif
Timepoint_3 *.tif
Timepoint_4 tif-files ...
movie 2019_2 3245 Timepoint_5 *.tif
Timepoint_6 *.tif
Timepoint_7 tif-files ...
2019_3 3245 Timepoint_8 *.tif
Timepoint_9 *.tif
In all Timepoint_x folders are many tif-files. I want to:
  1. loop over all folders and subfolders to find all tif-files
  2. copy to another folder and
  3. rename them by
  4. sorting them in new folders with specific name scheme
How can I loop over all folders and subfolders till the function finds the tif files in a smart way? There are many existing functions to loop over subfolders. But I neither undertand nor even use them.
How can I combine the missing task with my existing code?
aim:
3_2_1_RFP_1.tif
3_2_1 3_2_1_RFP_10.tif
3_2_1_CFP_13.tif
image_sorted
3_2_1_RFP_1.tif
3_2_2 3_2_2_RFP_2.tif
3_2_2_YFP_2.tif
% create folder for sorted images = dest
outputFolder = fullfile(pwd, 'image_sorted')
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
end
%
path1 ='C:\Users\Desktop\rename_microscope_files\movie\2019_1\3245\TimePoint_1'
dest = 'C:\Users\Desktop\rename_microscope_files\image_sorted'
source =fullfile(path1,'*.tif');
myfile= dir(source);
% to do: 1. loop over all folders, number of timePoint_x folders can vary
% 2. loop over files, copy all tif files without thumb in filename to folder B
for i = 1:numel(myfile)
if ~contains(myfile(i).name, '_thumb')
copyfile(fullfile(path1, myfile(i).name), dest);
end
end
% to do: 3. rename files, assign file format
% e.g. tif file name in folder timePoint_1: movie_C02_w1_B9D7398B.tif
% --> 3_2_1_RFP_1.tif
% (row_column_site_wave_timepoint)
% this file should be put in folder 3_2_1
for i = 1:size(file_names)
fname = file_names(i).name;
fname = strsplit(fname,'_');
fname = char(fname);
row = fname(1); % takes 1. letter
col = str2num(fname(2:3)); % 2. and 3. letter
switch row
case 'A'
row = 1;
case 'B'
row = 2;
case 'C'
row = 3;
case 'D'
row = 4;
case 'E'
row = 5;
case 'F'
row = 6;
case 'G'
row = 7;
case 'H'
row = 8;
end
switch wave
case 'w1'
wave = RFP;
case 'w2'
wave = YFP;
case 'w3'
wave = CFP;
end
% build structure .row = defined features
new_fname_info(i).row = row;
new_fname_info(i).col = col;
new_fname_info(i).site = 1;
new_fname_info(i).org_fname = file_names(i).name;
new_fname_info.channel = wave;
new_fname_info.timepoint = -1; % space holder, return struct
end
% to do: 4. to do: sorting files and moving into parent folder like 3_2_1

Respuestas (2)

meghannmarie
meghannmarie el 15 de Nov. de 2019
Editada: meghannmarie el 18 de Nov. de 2019
Are you trying to do something like this?
outputFolder = fullfile(pwd, 'image_sorted')
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
end
path1 ='C:\Users\Desktop\rename_microscope_files\movie\2019_1\3245\TimePoint_1'
dest = 'C:\Users\Desktop\rename_microscope_files\image_sorted'
% to do: 1. loop over all folders, number of timePoint_x folders can vary
source =fullfile(path1,'**\*.tif');
myfiles = dir(source);
% 2. loop over files, copy all tif files without thumb in filename to folder B
for i = 1:numel(myfiles)
myfile = myfiles(i).name;
if ~contains(myfile, '_thumb')
copyfile(fullfile(myfiles(i).folder, myfiles(i).name), dest);
end
end
  6 comentarios
meghannmarie
meghannmarie el 21 de Nov. de 2019
Try this, does the variable myfiles contain the path names of the files you want to move? Otherwise maybe I ma not undertanding problem/question.
outputFolder = fullfile(pwd, 'image_sorted');
if ~exist(outputFolder, 'dir')
mkdir(outputFolder);
end
%Folder with fubfolders that contain .tif files
input_folder = 'C:\Users\Desktop\rename_microscope_files\movie';
% Create structure with all .tif files in folder and subfolders
source =fullfile(input_folder,'**\*.tif');
myfiles = dir(source);
%Remove files with _thumb in file name. Create cell array to file to copy.
idx = ~contains({myfiles.name}, '_thumb');
myfiles = fullfile({myfiles(idx).folder}, {myfiles(idx).name});
% Loop over cell array and copy files to output folder.
for f = 1:numel(myfiles)
copyfile(myfiles{f},outputFolder);
end

Iniciar sesión para comentar.


Image Analyst
Image Analyst el 19 de Nov. de 2019
Try imageDatastore().

Categorías

Más información sobre File Operations en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by