数据导入导出 #

一、MAT文件 #

1.1 保存变量 #

matlab
% 创建变量
x = 1:10;
y = rand(5, 5);
z = 'Hello';

% 保存所有变量
save('mydata.mat');

% 保存指定变量
save('mydata.mat', 'x', 'y');

% 追加变量
save('mydata.mat', 'z', '-append');

% 保存为文本格式
save('mydata.txt', 'x', '-ascii');

% 保存为v7.3格式(支持大文件)
save('mydata.mat', '-v7.3');

1.2 加载变量 #

matlab
% 加载所有变量
load('mydata.mat');

% 加载指定变量
load('mydata.mat', 'x', 'y');

% 加载到结构体
data = load('mydata.mat');
x = data.x;
y = data.y;

二、CSV文件 #

2.1 读取CSV #

matlab
% readmatrix(推荐)
data = readmatrix('data.csv');

% readtable(保留表头)
T = readtable('data.csv');

% readcell(混合类型)
C = readcell('data.csv');

% csvread(旧方法,不推荐)
data = csvread('data.csv');

2.2 写入CSV #

matlab
% writematrix(推荐)
data = rand(5, 3);
writematrix(data, 'output.csv');

% writetable
T = table(rand(5,1), rand(5,1), 'VariableNames', {'x', 'y'});
writetable(T, 'output.csv');

% csvwrite(旧方法,不推荐)
csvwrite('output.csv', data);

2.3 带选项读写 #

matlab
% 读取选项
opts = detectImportOptions('data.csv');
opts.VariableTypes = {'double', 'double', 'string'};
data = readtable('data.csv', opts);

% 写入选项
writematrix(data, 'output.csv', 'Delimiter', ',');
writematrix(data, 'output.tsv', 'Delimiter', '\t');

三、Excel文件 #

3.1 读取Excel #

matlab
% readmatrix
data = readmatrix('data.xlsx');

% readtable
T = readtable('data.xlsx');

% readcell
C = readcell('data.xlsx');

% 指定工作表
data = readmatrix('data.xlsx', 'Sheet', 'Sheet2');

% 指定范围
data = readmatrix('data.xlsx', 'Range', 'A1:C10');

% xlsread(旧方法)
[num, txt, raw] = xlsread('data.xlsx');

3.2 写入Excel #

matlab
% writematrix
data = rand(5, 3);
writematrix(data, 'output.xlsx');

% writetable
T = table(rand(5,1), rand(5,1), 'VariableNames', {'x', 'y'});
writetable(T, 'output.xlsx');

% 指定工作表
writematrix(data, 'output.xlsx', 'Sheet', 'Results');

% 追加数据
writematrix(data, 'output.xlsx', 'Sheet', 1, 'Range', 'A7');

% xlswrite(旧方法)
xlswrite('output.xlsx', data);

四、文本文件 #

4.1 读取文本 #

matlab
% fileread(读取全部内容)
content = fileread('data.txt');

% readlines(逐行读取)
lines = readlines('data.txt');

% fopen + fgetl(逐行处理)
fid = fopen('data.txt', 'r');
while ~feof(fid)
    line = fgetl(fid);
    % 处理每一行
end
fclose(fid);

% textscan(格式化读取)
fid = fopen('data.txt', 'r');
data = textscan(fid, '%f %f %s');
fclose(fid);
x = data{1};
y = data{2};
names = data{3};

4.2 写入文本 #

matlab
% fprintf
fid = fopen('output.txt', 'w');
fprintf(fid, 'Hello World\n');
fprintf(fid, '数值: %.2f\n', 3.14159);
fclose(fid);

% writelines
lines = ['第一行'; '第二行'; '第三行'];
writelines(lines, 'output.txt');

% writematrix
data = rand(5, 3);
writematrix(data, 'output.txt', 'Delimiter', '\t');

4.3 文件模式 #

matlab
% 'r'  - 只读
% 'w'  - 写入(覆盖)
% 'a'  - 追加
% 'r+' - 读写
% 'w+' - 读写(覆盖)

fid = fopen('data.txt', 'a');  % 追加模式
fprintf(fid, '新内容\n');
fclose(fid);

五、JSON文件 #

5.1 读取JSON #

matlab
% jsondecode
json_str = '{"name": "张三", "age": 25}';
data = jsondecode(json_str);

% 从文件读取
json_str = fileread('data.json');
data = jsondecode(json_str);

5.2 写入JSON #

matlab
% jsonencode
data.name = '张三';
data.age = 25;
data.scores = [85 90 78];
json_str = jsonencode(data, 'PrettyPrint', true);

% 写入文件
fid = fopen('output.json', 'w');
fprintf(fid, '%s', json_str);
fclose(fid);

六、图像文件 #

6.1 读取图像 #

matlab
% imread
img = imread('image.jpg');
img = imread('image.png');
img = imread('image.bmp');

% 获取图像信息
info = imfinfo('image.jpg');

6.2 写入图像 #

matlab
% 创建图像
img = rand(100, 100, 3);

% 保存图像
imwrite(img, 'output.jpg');
imwrite(img, 'output.png');
imwrite(img, 'output.jpg', 'Quality', 95);  % JPEG质量

七、二进制文件 #

7.1 读取二进制 #

matlab
fid = fopen('data.bin', 'rb');

% 读取整数
data = fread(fid, [100, 1], 'int32');

% 读取浮点数
data = fread(fid, [100, 1], 'double');

% 读取到文件末尾
data = fread(fid, inf, 'double');

fclose(fid);

7.2 写入二进制 #

matlab
data = rand(100, 1);

fid = fopen('output.bin', 'wb');
fwrite(fid, data, 'double');
fclose(fid);

八、实用示例 #

8.1 批量读取文件 #

matlab
function data = read_all_csv(folder_path)
% READ_ALL_CSV 批量读取CSV文件
    
    files = dir(fullfile(folder_path, '*.csv'));
    data = cell(length(files), 1);
    
    for i = 1:length(files)
        filename = fullfile(folder_path, files(i).name);
        data{i} = readmatrix(filename);
        fprintf('读取: %s\n', files(i).name);
    end
end

8.2 导出分析结果 #

matlab
function export_results(filename, results)
% EXPORT_RESULTS 导出分析结果到Excel
    
    % 创建工作簿
    writematrix(results.data, filename, 'Sheet', '数据');
    
    % 添加统计信息
    stats = [results.mean; results.std; results.min; results.max];
    writematrix(stats, filename, 'Sheet', '统计');
    
    % 添加说明
    info = {'均值', num2str(results.mean);
            '标准差', num2str(results.std);
            '最小值', num2str(results.min);
            '最大值', num2str(results.max)};
    writematrix(info, filename, 'Sheet', '说明');
    
    fprintf('结果已保存到: %s\n', filename);
end

九、总结 #

本章学习了:

  1. MAT文件:save、load
  2. CSV文件:readmatrix、writematrix
  3. Excel文件:readmatrix、writematrix
  4. 文本文件:fopen、fprintf、textscan
  5. JSON文件:jsondecode、jsonencode
  6. 图像文件:imread、imwrite
  7. 二进制文件:fread、fwrite

下一章将学习数据预处理。

最后更新:2026-03-27