如何在MATLAB中处理文件列表
在MATLAB中,我的函数如下:如何在MATLAB中处理文件列表,matlab,csv,directory,Matlab,Csv,Directory,在MATLAB中,我的函数如下: names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'} data_conversion(names) %this function creat a folder in C001 to save results 我有100个文件夹,分别命名为C001,C002,…,C100。每个文件夹有三个.csv文件,命名如下:C001_Deo.csv,C
names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'}
data_conversion(names) %this function creat a folder in C001 to save results
我有100个文件夹,分别命名为C001
,C002
,…
,C100
。每个文件夹有三个.csv
文件,命名如下:C001_Deo.csv
,C001_Oxy.csv
,C001_Tal.csv
,C002_Deo.csv
,C002_Oxy.csv
,
是否有人可以帮我写一个循环,这样我就可以一次运行数据转换(名称)
,以获得所有结果。那我就不需要运行100次了。
我试了很多次,但都失败了。谢谢 您可以尝试以下方法:
baseFolder = 'd:\';
for i=1:100
% get a string for 001 -> 100
strtmp = num2str(i);
str = cat(2,repmat('0',1,3-length(strtmp)),strtmp);
% reconstitute folder path
folderString = [baseFolder 'C' str filesep];
% and the 3 file paths
f1 = [folderString 'C' str '_Deo.csv'];
f2 = [folderString 'C' str '_Oxy.csv'];
f3 = [folderString 'C' str '_Tal.csv'];
% run your data_conversion function
data_conversion({f1 f2 f3})
end
您可以尝试以下方法:
baseFolder = 'd:\';
for i=1:100
% get a string for 001 -> 100
strtmp = num2str(i);
str = cat(2,repmat('0',1,3-length(strtmp)),strtmp);
% reconstitute folder path
folderString = [baseFolder 'C' str filesep];
% and the 3 file paths
f1 = [folderString 'C' str '_Deo.csv'];
f2 = [folderString 'C' str '_Oxy.csv'];
f3 = [folderString 'C' str '_Tal.csv'];
% run your data_conversion function
data_conversion({f1 f2 f3})
end
您的文件名存储在一个文件夹中<代码>名称(1)
返回名称的第一个单元格names{1}
返回第一个单元格的内容,因此循环如下所示
names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'}
for loopi = 1:length(names)
data_conversion(names{loopi})
end
我假设您的所有文件都位于一个位置,因此您可能希望自动获取文件列表:
folders = dir('d:\C*');
for loopi = 1:length(folders)
% if order matters
folder = strcat(folders(loopi).folder,'\',folders(loopi).name);
f1 = dir([folder,'\*_Deo.csv']);
f2 = dir([folder,'\*_Oxy.csv']);
f3 = dir([folder,'\*_Tal.csv']);
data_conversion({f1(1).name, f2(1).name, f3(1).name});
end
dir
返回一个,用括号而不是括号索引。您的文件名存储在<代码>名称(1)
返回名称的第一个单元格names{1}
返回第一个单元格的内容,因此循环如下所示
names = {'d:\C001\C001_Deo.csv','d:\C001\C001_Oxy.csv','d:\C001\C001_Tal.csv'}
for loopi = 1:length(names)
data_conversion(names{loopi})
end
我假设您的所有文件都位于一个位置,因此您可能希望自动获取文件列表:
folders = dir('d:\C*');
for loopi = 1:length(folders)
% if order matters
folder = strcat(folders(loopi).folder,'\',folders(loopi).name);
f1 = dir([folder,'\*_Deo.csv']);
f2 = dir([folder,'\*_Oxy.csv']);
f3 = dir([folder,'\*_Tal.csv']);
data_conversion({f1(1).name, f2(1).name, f3(1).name});
end
dir
返回一个,它用括号而不是括号进行索引。如果您的函数一次需要整个单元格数组,那么这里有一个选项:
Cnum = strsplit(strtrim(sprintf('C%03d ', 1:100)))';
basepath = 'D:';
complete = @(str) fullfile(basepath, Cnum, strcat(Cnum, '_', str, '.csv'));
pths = [complete('Deo') complete('Oxy') complete('Tal')];
否则,请使用Laure的解决方案。如果您的函数同时需要整个单元阵列,那么这里有一个选项:
Cnum = strsplit(strtrim(sprintf('C%03d ', 1:100)))';
basepath = 'D:';
complete = @(str) fullfile(basepath, Cnum, strcat(Cnum, '_', str, '.csv'));
pths = [complete('Deo') complete('Oxy') complete('Tal')];
否则,请使用Laure的解决方案。展示失败的尝试。请参见显示失败的尝试。请参阅当我运行folders(loop).folder时,我遇到一个错误:“引用不存在的字段‘folder’。”但无论如何,我的问题得到了解决。非常感谢你!当我运行folders(loop).folder时,我得到一个错误:“引用不存在的字段‘folder’。”但无论如何,我的问题解决了。非常感谢你!这就是我需要的。非常感谢你!这就是我需要的。非常感谢你!这对我有帮助。非常感谢你!这对我有帮助。非常感谢你!