支持的导入和导出文件格式
下表显示了可以从 MATLAB 应用程序导入和导出的文件格式。
文件内容扩展名说明导入函数导出函数MATLAB 格式化数据MAT保存的 MATLAB 工作区
访问 MATLAB 工作区中的部分变量
文本任意文本,包括:
CSV
TXT逗号分隔的数字
分隔数字或者文本和数字混合无
电子表格XLS
XLSX
XLSM
XLSB(仅限安装了 Windows® 版 Microsoft® Excel® 的系统)
XLTM(仅导入)
XLTX(仅导入)
ODS(具有 COM 接口的系统)工作表或电子表格范围
可扩展标记语言XMLXML 格式化文本
MATLAB 格式化数据
load
将文件变量加载到工作区中
语法1
2
3
4
5
6
7load(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
8save(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
6p = 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
6A = 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
7p = 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
3m = 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
3M = 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
2csvwrite(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
5M = 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
5dlmwrite(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
8num = 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
6xlswrite(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]