1.load读取方式
只能读取数值数据,不能读取含文本的数据;日期按数值读取。
无需输入分隔符,可自动识别空格、逗号、分号、制表符。
不能自定义读取范围:
适用于txt、csv。
所耗时间:13.030081秒。
2.importdata读取方式
可读取数值数据和含文本的数据,但是要求文本在数据的第一行或第一列(不能同时在行和列都有文本)。返回值分为数值部分(data)和文本部分(textdata)
例如:a=importdata(filename,delm,nheaderlines);
多列数据时需输入分隔符。若不输入分隔符,整行会被作为字符串放入一列。
可从某一行开始读取数值数据。若使用importdata按钮,则可自定义读取范围和设置数据类型。
适用txt、xls、xlsx、csv。
所耗时间:3.437969秒。
3.textscan读取方式
可对列按照自定义格式读取数据,必须输入每列的读取格式,可跳过某个列或几列。按数值读取时,缺少值以NaN填补;按字符读取时,缺少值以空格填补。返回值按列放入元胞数组。
例如:c = textscan(fid,'format',n,'param',value)
可自定义分隔符,不是必须的。
可以自定义读取范围(行列)。
所耗时间:2.188760秒。
如果只读取四列:
所耗时间:1.809791秒。
4 dlmread(不推荐)建议readmatrix
将 ASCII 分隔的数值数据文件读取到矩阵
可以指定行列范围(必须已知结尾行列数,没有inf选项)。
例如 M = dlmread(filename,delimiter,[R1 C1 R2 C2])
dmlread(path);
所耗时间:4.599068秒。
dmlread(path,‘’,[0 0 5 3]);
所耗时间:0.012396秒。
5 readmatrix(2019a版本推出)
A = readmatrix(filename) 通过从文件中读取列向数据来创建数组。readmatrix 函数可自动检测文件的导入参数。
readmatrix 基于文件的扩展名确定文件格式:
(适用于带分隔符的文本文件).txt、.dat 或 .csv
(适用于电子表格文件).xls、.xlsb、.xlsm、.xlsx、.xltm、.xltx 或 .ods
对于包含数值和文本混合数据的文件,默认情况下,readmatrix 将数据作为数值数组导入。
6 fscanf
低级函数,适用范围最广。
使用方法与textscan类似,需要fopen和指定格式(但无法指定精度)。默认按列读取,否则需要指定矩阵大小。
例如:A = fscanf(fileID,formatSpec,[m n])
可以跳过特定字符(比如跳过字母而只保留数字),列数,有inf选项。
fileID = fopen(path);
file = fscanf(fileID,‘%d %f %f %f %f %f %f %f %f %f %f’);
所耗时间:26.793546秒。
跳过一部分后还是很慢……推测是因为不能指定精度造成的。
fileID = fopen(path);
file = fscanf(fileID,‘%d %f %f %f %*f %*f %*f %*f %*f %*f %*f’);
所耗时间:26.824455秒。
总结
通过低级文件 I/O 函数,可以最大程度地控制文件数据的读取和写入。但是,相对于更易于使用的高级函数,例如 importdata,这些低级函数要求指定更为详细的文件信息。有关读取文本文件的高级函数的详细信息,请参阅导入文本文件。
目前来看tesxtscan是最快的,如果跳过一定行列会更快,但是需要输入相应格式,使用起来没有那么方便。importdata速度次之,而且可以不用输入格式。