我必须处理一个大的CSV文件,最高可达2GB。更具体地说,我必须将所有这些数据上传到mySQL数据库,但在我必须对其进行一些计算之前,所以我需要在MATLAB中做所有这些事情(我的主管也想在MATLAB中做,因为他熟悉MATLAB :()。
我知道如何处理这些大文件?
答案 0 :(得分:9)
您应该使用textscan以块的形式读取数据,然后进行处理。这可能比一次读取一行更有效。例如,如果您有3列数据,则可以执行以下操作:
filename = 'fname.csv';
[fh, errMsg] = fopen( filename, 'rt' );
if fh == -1, error( 'couldn''t open file: %s: %s', filename, errMsg ); end
N = 100; % read 100 rows at a time
while ~feof( fh )
c = textscan( fh, '%f %f %f', N, 'Delimiter', ',' );
doStuff(c);
end
修改
这些天(R2014b及更高版本),使用datastore
更容易也可能更有效。
答案 1 :(得分:0)
在this file exchange item中的MATLAB中处理大型数据集方面有很好的建议。
具体主题包括:
*了解数组的最大大小和MATLAB中的工作区
*使用未记录的功能向您显示MATLAB中的可用内存
*在Windows XP下设置3GB开关,为MATLAB增加1GB内存 *使用textscan读取大文本文件和内存映射功能以读取大型二进制文件