Path='D:\matlab_work\锂电池数据集\美国桑迪亚国家实验室Sandia National Lab\数据\电池循环测试数据\Sandia_Cell_Cycle_Testing_Data\Sandia Cell Cycle Testing Data\'; %读取Cycle数据 Cycle_File = dir(fullfile(Path)); % 显示文件夹下所有符合后缀名为.xlsx文件的完整信息 Cycle_FileNames =sort_nat({Cycle_File.name}'); % 提取符合后缀名为.txt的所有文件的文件名,转换为n行1列 for i=3:size(Cycle_FileNames,1) if contains(cell2mat(Cycle_FileNames(i)),'NCA') % continue % else filename_path_5=[Path,cell2mat(Cycle_FileNames(i))]; Cycle=dir(fullfile(filename_path_5)); Cycle_names = sort_nat({Cycle.name}'); for j=3:size(Cycle_names,1) if contains(cell2mat(Cycle_names(j)),'Reg') Cycle_name_path=[filename_path_5,'\',cell2mat(Cycle_names(j))]; % 以table读取xls文件,并以cell形式存储 Cycle_data{i-2,j-2}=readExcelTable(Cycle_name_path); end end end end 优化代码
时间: 2024-02-25 20:58:47 浏览: 173
以下是对上述代码的优化:
1. 将 `Path` 路径的结尾 '/' 去掉,改为使用 `fullfile` 函数连接路径,以提高代码可移植性和可读性。
2. 将 `Cycle_FileNames` 的变量名改为 `Cycle_FileNames_cell`,以更好地表明其为一个 cell 数组。
3. 将 `contains` 函数的判断条件改为 `endsWith` 函数,以提高代码执行效率。
4. 在读取 Excel 文件之前,先判断该文件是否存在,如果不存在则跳过该文件的读取。这样可以减少读取不存在文件的运算量,并提高代码执行效率。
5. 使用 `prealloc` 函数预分配 `Cycle_data` 数组,以避免动态增长数组的开销。
综上所述,优化后的代码如下所示:
```
Path = fullfile('D:', 'matlab_work', '锂电池数据集', '美国桑迪亚国家实验室Sandia National Lab', '数据', '电池循环测试数据', 'Sandia Cell Cycle Testing Data');
Cycle_File = dir(fullfile(Path, '*.xlsx'));
Cycle_FileNames_cell = sort_nat({Cycle_File.name}');
Cycle_data = cell(numel(Cycle_FileNames_cell)-2, 2);
for i = 3:numel(Cycle_FileNames_cell)
if endsWith(Cycle_FileNames_cell{i}, 'NCA.xlsx')
continue
end
filename_path_5 = fullfile(Path, Cycle_FileNames_cell{i});
Cycle = dir(fullfile(filename_path_5));
Cycle_names = sort_nat({Cycle.name}');
for j = 3:numel(Cycle_names)
if endsWith(Cycle_names{j}, 'Reg.xlsx')
Cycle_name_path = fullfile(filename_path_5, Cycle_names{j});
if exist(Cycle_name_path, 'file')
Cycle_data{i-2, j-2} = readExcelTable(Cycle_name_path);
end
end
end
end
Cycle_data = Cycle_data(1:size(Cycle_FileNames_cell,1)-2, :);
```
阅读全文