matlab数据的导入导出-总结篇

支持的导入和导出文件格式

下表显示了可以从 MATLAB 应用程序导入和导出的文件格式。


文件内容

扩展名

说明

导入函数

导出函数

MATLAB 格式化数据

MAT

保存的 MATLAB 工作区

load

save

访问 MATLAB 工作区中的部分变量

matfilematfile

文本

任意文本,包括:

CSV

TXT

逗号分隔的数字

csvread

csvwrite

分隔数字

dlmread

dlmwrite

分隔数字或者文本和数字混合

textscan

列向分隔数字或者文本和数字混合

readtable

writetable

电子表格

XLS

XLSX

XLSM

XLSB(仅限安装了 Windows®Microsoft® Excel® 的系统)

XLTM(仅导入)

XLTX(仅导入)

ODS(具有 COM 接口的系统)

工作表或电子表格范围

xlsread

xlswrite

工作表或电子表格范围中的列向数据

readtable

writetable

可扩展标记语言

XML

XML 格式化文本

xmlread

xmlwrite


MATLAB 格式化数据

load

将文件变量加载到工作区中

语法

1
2
3
4
5
6
7
load(filename) load(filename) 从 filename 加载数据。
load(filename,variables) 加载 MAT 文件 filename 中的指定变量。
load(filename,'-ascii') 将 filename 视为 ASCII 文件,而不管文件扩展名如何。
load(filename,'-mat') 将 filename 视为 MAT 文件,而不管文件扩展名如何。
load(filename,'-mat',variables) 加载 filename 中的指定变量。
S = load(___) 使用前面语法组中的任意输入参数将数据加载到 S 中。
load filename 是命令形式的语法。命令形式需要的特殊字符更少。

save

将工作区变量保存到文件中

语法

1
2
3
4
5
6
7
8
save(filename) 将当前工作区中的所有变量保存在MATLAB格式的二进制文件(MAT 文件)filename 中。如果 filename 已存在,save 会覆盖该文件。
save(filename,variables) 仅保存 variables 指定的结构体数组的变量或字段。
save(filename,variables,fmt) 以 fmt 指定的文件格式保存。variables 参数为可选参数。如果您不指定 variables,save 函数将所有变量保存在工作区中。
save(filename,variables,version) 保存为 version 指定的 MAT 文件版本。variables 参数为可选参数。
save(filename,variables,version,'-nocompression') 将变量保存到 MAT 文件,而不压缩。'-nocompression' 标志仅支持 7.3 版的 MAT 文件。因此,您必须将 version 指定为 '-v7.3'。variables 参数为可选参数。
save(filename,variables,'-append') 将新变量添加到一个现有文件中。如果 MAT 文件中已经存在变量,则 save 会使用工作区中的值覆盖它。
save(filename,variables,'-append','-nocompression') 将新变量添加到一个现有文件中,而不进行压缩。现有文件必须是 7.3 版的 MAT 文件。
save filename 是命令形式的语法。命令形式需要的特殊字符更少。

fmt - 文件格式

  • ‘-mat’ 二进制的 MAT 文件格式。
  • ‘-ascii’ 具有 8 位精度的文本格式。
  • ‘-ascii’,’-tabs’ 具有 8 位精度的以制表符分隔的文本格式。
  • ‘-ascii’,’-double’ 具有 16 位精度的文本格式。
  • ‘-ascii’,’-double’,’-tabs’ 具有 16 位精度的以制表符分隔的文本格式。

示例

创建两个变量,将其保存到 ASCII 文件中,然后查看文件内容。
1
2
3
4
5
6
p = rand(1,10);
q = ones(10);
save('pqfile.txt','p','q','-ascii')
type('pqfile.txt')

save pqfile.txt p q -ascii
将变量保存到 7.3 版的 MAT 文件中,而不进行压缩
1
2
3
4
5
6
A = rand(5);
B = magic(10);
save('myFile.mat','A','B','-v7.3','-nocompression')

save myFile.mat A B -v7.3 -nocompression
'-nocompression' 标志有助于更快地保存那些大于 2 GB 或者不会从压缩中受益的变量。
将变量追加到 MAT 文件中
1
2
3
4
5
6
7
p = rand(1,10);
q = ones(10);
save('test.mat','p','q')

a = 50;
save('test.mat','a','-append')
whos('-file','test.mat')

matfile

直接访问和更改 MAT 文件中的变量,而不加载到内存中

语法

1
2
3
m = matfile(filename) 创建 MAT 文件对象 m,该对象连接到名为 filename 的 MAT 文件。该对象允许您直接访问和更改 MAT 文件中的变量,而不必将变量加载到内存中。
matfile 函数提供的部分加载和保存所需的内存比 load 和 save 命令少,因为后两者始终处理全部变量。
m = matfile(filename,'Writable',isWritable) 启用或禁用对文件的写访问权限。

isWritable - 对 MAT 文件的写访问权限

对 MAT 文件的写访问权限,指定为 true 或 false。

  • true 允许保存到 MAT 文件。如果文件为只读文件,MATLAB 会使用 fileattrib 函数更改系统权限。
  • false 禁止保存到 MAT 文件。MATLAB 不更改系统权限。

对于新文件,默认值为 true;对于现有文件,默认值为 false。
数据类型:logical

文本

任意文本,包括:CSV, TXT

csvread 逗号分隔的数字

读取逗号分隔值 (CSV) 文件

语法

1
2
3
M = csvread(filename) 将逗号分隔值 (CSV) 格式化文件读入数组 M 中。该文件只能包含数值。
M = csvread(filename,R1,C1) 从行偏移量 R1 和列偏移量 C1 开始读取文件中的数据。例如,偏移量 R1=0、C1=0 指定文件中的第一个值。
M = csvread(filename,R1,C1,[R1 C1 R2 C2]) 仅读取行偏移量 R1 和 R2 及列偏移量 C1 和 C2 界定的范围。另一种定义范围的方法是使用电子表格表示法(例如 'A1..B7')而非 [0 0 6 1]。

csvwrite 逗号分隔的数字

写入逗号分隔值文件

语法

1
2
csvwrite(filename,M) 将矩阵 M 作为逗号分隔值写入 filename 中。将 filename 指定为字符矢量或字符串,例如 'csvlist.dat' 或 "csvlist.dat"。
csvwrite(filename,M,row,col) 将矩阵 M 写入以指定行和列偏移开始的 filename 中。行和列参数从零开始,因此 row=0 和 C=0 指定文件中的第一个值。

提示

csvwrite 用换行符但不用回车符终止每行。
csvwrite 最多写入五位有效数字。如果您需要更高精度,请使用带精度参数的 dlmwrite。
csvwrite 不接受输入矩阵 M 的元胞数组。要导出仅包含数值数据的元胞数组,请在调用 csvwrite 之前使用 cell2mat 将元胞数组转换为数值矩阵。要导出包含混合字母和数值数据的元胞数组(其中每个元胞包含一个元素),可使用 xlswrite 创建 Excel® 电子表格(如果您的系统安装了 Excel)。

dlmread 分隔数字

语法

1
2
3
4
5
M = dlmread(filename) 将 ASCII 分隔的数值数据文件读取到矩阵 M。dlmread 函数从该文件中检测到分隔符,并将重复的空白视为一个分隔符。
M = dlmread(filename,delimiter) 使用指定的分隔符读取该文件中的数据,并将重复的分隔符视为单独的分隔符。
M = dlmread(filename,delimiter,R1,C1) 从行偏移量 R1 和列偏移量 C1 开始读取。例如,偏移量 R1=0、C1=0 指定文件中的第一个值。
要指定行和列的偏移量而不指定分隔符,请将空字符用作占位符,例如 M = dlmread(filename,'',2,1)。
M = dlmread(filename,delimiter,[R1 C1 R2 C2]) 仅读取行偏移量 R1 和 R2 及列偏移量 C1 和 C2 界定的范围。另一种定义范围的方法是使用电子表格表示法(例如 'A1..B7')而非 [0 0 6 1]。

dlmwrite 分隔数字

语法

1
2
3
4
5
dlmwrite(filename,M) 将数组 M 中的数值数据写入一个 ASCII 格式的文件 filename,并使用默认分隔符 (,) 分隔各数组元素。如果文件 filename 已存在,则 dlmwrite 将覆盖该文件。
dlmwrite(filename,M,'-append') 将数据追加到现有文件 filename 的末尾。
dlmwrite(___,Name,Value) 使用一个或多个名称-值对组参数另外指定分隔符、换行符、偏移量和精度选项。
dlmwrite(filename,M,delimiter) 将数组 M 写入文件 filename,并使用指定分隔符 delimiter 分隔各数组元素。
dlmwrite(filename,M,delimiter,row,col) 从目标文件中指定的第 row 行和第 col 列开始写入数组。前导行和列用 delimiter 分隔的空元素填充。

名称-值对组参数

指定可选的、以逗号分隔的 Name,Value 对组参数。Name 为参数名称,Value 为对应的值。Name 必须放在单引号 (‘ ‘) 中。您可采用任意顺序指定多个名称和值对组参数,如 Name1,Value1,…,NameN,ValueN 所示。
示例:dlmwrite(‘myFile.txt’,M,’precision’,4,’delimiter’,’ ‘) 写入数组 M 中的数值,带四位有效位数并使用空白字符分隔。

‘delimiter’ - 用于分隔数组各元素的分隔符
‘roffset’ - 行偏移量:

行偏移量,指定为包含 ‘roffset’ 和标量、以逗号分隔的对组。行偏移量指示写入数值数据前所跳过的行数。这些行将用指定的分隔符填充。将新数据追加到现有文件时,新数据距现有数据的末尾有一定偏移。
行偏移量从零开始,因此 ‘roffset’,0 指示 MATLAB 从目标文件的第一行开始写入(即默认值)。但是,当追加到文件时,’roffset’,0 指示 MATLAB 从紧随现有数据后的第一行开始写入。
示例:’roffset’,2

‘coffset’ - 列偏移量

距目标文件左侧的列偏移量,指定为用逗号分隔的对组,由 ‘coffset’ 和标量组成。列偏移量指示写入数值数据前所跳过的列数。这些列将用指定的分隔符分隔。
列偏移量从零开始,因此 ‘coffset’,0 指示 MATLAB 从目标文件的第一列开始写入(即默认值)。
示例:’coffset’,1

‘precision’ - 数值精度

向文件写入数据时使用的数值精度,指定为用逗号分隔的对组,由 ‘precision’ 和标量或以 % 开头的 C 样式格式设定符(例如 ‘%10.5f’)组成。如果 precision 的值为标量,则其指示的是有效位数的个数。
示例:’precision’,3
示例:’precision’,’%10.5f’
数据类型:single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char

‘newline’ - 行终止符

行终止符,指定为逗号分隔的对组,由 ‘newline’ 和使用回车符/换行符 (CR/LF) 的 ‘pc’ 或使用换行符 (LF) 的 ‘unix’ 所组成。
示例:’newline’,’pc’

xlsread 工作表或电子表格范围

读取 Microsoft Excel 电子表格文件

语法

1
2
3
4
5
6
7
8
num = xlsread(filename) 读取名为 filename 的 Microsoft Excel电子表格工作表中的第一张工作表,并在一个矩阵中返回数值数据。
num = xlsread(filename,sheet) 读取指定的工作表。
num = xlsread(filename,xlRange) 从工作簿的第一个工作表的指定范围内读取数据。使用 Excel 范围语法,例如 'A1:C3'
num = xlsread(filename,sheet,xlRange) 读取指定的工作表和范围。
num = xlsread(filename,sheet,xlRange,'basic') 在 basic 导入模式下读取电子表格中的数据。如果您的计算机未安装 Windows版 Excel,xlsread 会自动在 basic 导入模式下运行,该模式支持 XLS、XLSX、XLSM、XLTX 和 XLTM 文件。如果不指定所有参数,请使用空字符矢量 '' 作为占位符,例如,num = xlsread(filename,'','','basic')。
[num,txt,raw] = xlsread(___) 还使用先前语法中的任何输入参数,在元胞数组 txt 中返回文本字段,在元胞数组 raw 中返回数值数据和文本数据。
___ = xlsread(filename,-1) 打开一个 Excel 窗口以便按交互方式来选择数据。选择工作表,将鼠标拖放到所需范围上,然后点击确定。只有安装了 Microsoft Excel 软件的 Windows 计算机才支持此语法。
[num,txt,raw,custom] = xlsread(filename,sheet,xlRange,'',processFcn)(其中 processFcn 是函数句柄)读取电子表格,对数据调用 processFcn,并在数组 num 中以数值数据的形式返回最终结果。xlsread 函数在元胞数组 txt 中返回文本字段、在元胞数组 raw 中返回数值和文本数据,并在数组 custom 中返回 processFcn 的第二个输出。xlsread 函数不会更改电子表格中存储的数据。只有安装了 Excel 软件的 Windows 计算机才支持此语法。

xlswrite 工作表或电子表格范围

写入 Microsoft Excel 电子表格文件

语法

1
2
3
4
5
6
xlswrite(filename,A) 将矩阵 A 写入 Microsoft® Excel® 电子表格工作簿 filename 中的第一张工作表,从单元格 A1 开始写入。
xlswrite(filename,A,sheet) 将数据写入指定的工作表。
xlswrite(filename,A,xlRange) 将数据写入工作簿的第一个工作表中由 xlRange 指定的矩形区域内。使用 Excel 范围语法,例如 'A1:C3'
xlswrite(filename,A,sheet,xlRange) 将数据写入指定的工作表和范围。
status = xlswrite(___) 使用先前语法中的任何输入参数返回写入操作的状态。当操作成功时,status 为 1。否则,status 为 0
[status,message] = xlswrite(___) 还在结构体 message 中返回写入操作生成的任何警告或错误消息。

示例

将工作表读取到数值矩阵
1
2
3
4
5
6
7
创建一个名为 myExample.xlsx 的 Excel 文件。
values = {1, 2, 3 ; 4, 5, 'x' ; 7, 8, 9};
headers = {'First','Second','Third'};
xlswrite('myExample.xlsx',[headers; values]);
读取第一个工作表中的数值数据。
filename = 'myExample.xlsx';
A = xlsread(filename)

myExample.xlsx 的 Sheet1 包含:

First Second Third
1 2 3
4 5 x
7 8 9

A =
1 2 3
4 5 NaN
7 8 9

请求数值、文本和原始数据

从第一个示例中的 Excel 文件中请求数值数据、文本数据和合并数据。

1
[num,txt,raw] = xlsread('myExample.xlsx')

num =
1 2 3
4 5 NaN
7 8 9

txt =
‘First’ ‘Second’ ‘Third’
‘’ ‘’ ‘’
‘’ ‘’ ‘x’

raw =
‘First’ ‘Second’ ‘Third’
[ 1] [ 2] [ 3]
[ 4] [ 5] ‘x’
[ 7] [ 8] [ 9]

https://mathworks.com/