matlab和并csv文件
时间: 2025-05-30 14:09:21 浏览: 17
### MATLAB 合并多个 CSV 文件的方法
在 MATLAB 中,可以通过多种方法实现对多个 CSV 文件的数据合并操作。以下是基于提供的引用以及扩展知识的具体说明。
#### 方法一:通过 `csvread` 和循环逐个读取文件
可以利用 `csvread` 函数逐一读取 CSV 文件中的数据,并将其存储在一个更大的矩阵中。这种方法适用于所有 CSV 文件具有相同结构的情况。
```matlab
% 清除变量和关闭图形窗口
clear;
clc;
% 获取当前目录下所有的 .csv 文件
files = dir('*.csv');
numFiles = length(files);
% 初始化一个空数组用于存储所有数据
allData = [];
for i = 1:numFiles
fileName = files(i).name;
% 使用 csvread 读取数据 (假设从第二行开始有有效数据)
data = csvread(fileName, 1, 0);
% 将每次读取的数据追加到 allData 数组中
allData = [allData; data];
end
% 将最终的结果保存为一个新的 CSV 文件
csvwrite('combined_data.csv', allData);
```
此代码片段展示了如何遍历指定路径下的所有 `.csv` 文件,并将它们的内容按顺序堆叠在一起形成新的矩阵[^1]。
---
#### 方法二:使用自然排序加载多文件数据
如果需要处理大量带有特定命名模式的 CSV 文件,则可采用更高效的批量导入方式。下面是一个例子:
```matlab
% 设置工作区环境
clear;
clc;
% 定义目标文件夹位置及其内部符合条件的所有 *.csv 文件列表
filePath = 'D:\XJTU-SY_Bearing_Datasets\35Hz12kN\Bearing1_3';
fileList = dir(fullfile(filePath, '*.csv'));
% 对获取的名字进行自然排序以防乱序问题影响后续分析效果
sortedNames = sort_nat({fileList.name});
totalLength = length(sortedNames);
mergedData = [];
for idx = 1:totalLength
currentFileName = fullfile(filePath, sortedNames{idx});
% 跳过前两行作为表头信息只保留数值部分
tempMatrix = csvread(currentFileName, 2);
mergedData = vertcat(mergedData, tempMatrix);
end
disp('All Data Merged Successfully!');
figure();
plot(mergedData(:,1), mergedData(:,2)); title('Combined Plot of All Files');
xlabel('Time Steps'), ylabel('Amplitude Values');
legend('Sensor Readings Over Time');
saveas(gcf,'MergedPlot.png'); save('FinalDataset.mat','mergedData','-v7.3');
```
上述脚本不仅实现了基本功能还增加了绘图展示环节以便直观观察整体趋势变化情况[^2]。
---
#### 方法三:调用专门设计好的函数完成自动化流程
为了简化开发过程减少重复劳动量还可以编写通用型工具类程序来执行此类任务比如定义如下形式的一个辅助子例程:
```matlab
function combineCSVFiles(inputFolder)
if ~exist(inputFolder,'dir')
error(['Input path does not exist or is invalid:' inputFolder]);
else
cd(inputFolder);
filenames = dir('*.csv');
nFiles = size(filenames,1);
if(nFiles>0)
combinedTable={};
for k=1:nFiles
try
tmpTbl=readtable(fullfile(inputFolder,char(filenames(k).name)));
if(isempty(combinedTable))
combinedTable=tmpTbl;
else
combinedTable=[combinedTable;tmpTbl];
end
catch ME
warning(['Error reading ',char(filenames(k).name),' Skipping...']);
end
end
writetable(combinedTable,[inputFolder '\Total_Combined_Output.csv'],'Delimiter','comma');
disp('Combination Complete.');
else
msgbox({'No CSV found! Please check your directory.'},'Warning Message Box');
end
end
end
```
这段封装后的逻辑允许用户只需提供源目录即可一键生成汇总版文档而无需关心具体细节[^3]。
---
### 注意事项
- **内存管理**:当涉及超大规模数据集时应考虑分块读写策略以免超出系统可用RAM容量造成崩溃风险。
- **编码一致性**:确保原始输入文件均采用统一字符集标准否则可能导致解析错误。
- **异常捕获机制**:建议加入更多健壮性的检验措施应对潜在意外状况提升可靠性。
阅读全文
相关推荐















