如何在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

在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
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’。”但无论如何,我的问题解决了。非常感谢你!这就是我需要的。非常感谢你!这就是我需要的。非常感谢你!这对我有帮助。非常感谢你!这对我有帮助。非常感谢你!