如何在MATLAB循环中提取并保存不重复命名的分组表格
解决MATLAB循环中导出表格被覆盖的问题
问题根源
你当前调用writetable时未指定唯一文件名,MATLAB会默认使用固定名称(如table.csv)输出,导致每次循环都会覆盖上一次的文件。
修正方案
核心是为每个分组生成独特的输出文件名,以下两种方案任选:
方案1:用分组的Unit名称命名(直观易识别)
直接提取每个分组对应的Unit值作为文件名的一部分,方便后续直接通过文件名识别对应分组:
clc clear all %% 读取数据并预处理 data = readtable('Input/Wales_Interim_23/Pembrokeshire_23_Finished.csv'); data.Unit = extractBefore(data.Reg_ID, '_'); % 提取Unit编号 % 获取分组索引和对应的分组名称 [gidx, unitNames] = findgroups(data.Unit); N = max(gidx); % 创建输出文件夹(避免路径不存在报错) outputDir = 'Units'; if ~exist(outputDir, 'dir') mkdir(outputDir); end % 循环处理每个分组 for ii = 1:N currentTable = data(gidx == ii, :); % 生成带Unit名称的唯一文件名 fileName = sprintf('Unit_%s.csv', unitNames{ii}); % 写入指定文件夹 writetable(currentTable, fullfile(outputDir, fileName)); end
方案2:用循环序号命名(简单直接)
如果不需要用Unit名称区分,直接用循环的序号生成唯一文件名:
clc clear all %% 读取数据并预处理 data = readtable('Input/Wales_Interim_23/Pembrokeshire_23_Finished.csv'); data.Unit = extractBefore(data.Reg_ID, '_'); gidx = findgroups(data.Unit); N = max(gidx); units = cell(N, 1); % 创建输出文件夹 outputDir = 'Units'; if ~exist(outputDir, 'dir') mkdir(outputDir); end % 循环处理每个分组 for ii = 1:N units{ii} = data(gidx == ii, :); % 生成带序号的唯一文件名 fileName = sprintf('Unit_%d.csv', ii); writetable(units{ii}, fullfile(outputDir, fileName)); end
关键细节
sprintf用于生成格式化的唯一文件名,彻底避免覆盖问题fullfile函数自动适配不同系统的路径分隔符(Windows用\,Linux/macOS用/),避免路径错误- 提前创建输出文件夹(
mkdir)可以防止因路径不存在导致的写入失败
内容的提问来源于stack exchange,提问作者Adam Johns
相关产品推荐
相关产品推荐

