【问题标题】:Working with a big CSV file in MATLAB在 MATLAB 中处理一个大的 CSV 文件
【发布时间】:2011-08-07 20:30:55
【问题描述】:

我必须处理最大 2GB 的大 CSV 文件。更具体地说,我必须将所有这些数据上传到 mySQL 数据库,但在我必须对此进行一些计算之前,所以我需要在 MATLAB 中做所有这些事情(我的主管也想在 MATLAB 中做,因为他只熟悉MATLAB :( )。

知道如何处理这些大文件吗?

【问题讨论】:

  • 算什么?它需要完整文件中的数据还是可以逐行处理?
  • 对您的文件格式的描述将是最有帮助的。
  • @iUngi:所有“CSV”意味着您拥有的值用逗号分隔,但这并没有太大帮助。例如,您可以混合使用字符串、整数、浮点数等,并且文件的每一行都有不同数量的这些。看来您已经得到了想要的答案(因为您将答案标记为“已接受”),但以后请记住,如果您将问题尽可能清晰和详细,您将更有可能得到好的答案.
  • 还好我文件上没有字符串,只有整数或浮点数,第一行是字段名。

标签: mysql matlab file-io csv bigdata


【解决方案1】:

您可能应该使用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。我可以说服您在错误消息中包含更多详细信息吗? IM(NS)HO 详细诊断使调试方式更容易,并且是向示例代码阅读器公开的好习惯。 file = 'fname.csv'; [fh,errMsg] = fopen(file, 'rt'); if fh == -1; error('Couldn''t open file %s: %s', file, errMsg); end; ... fclose(fh);
【解决方案2】:

this file exchange item 中有关于在 MATLAB 中处理大型数据集的好建议。

具体主题包括:
* 了解数组的最大大小和 MATLAB 中的工作区
* 使用未记录的功能向您展示 MATLAB 中的可用内存
* 在 Windows XP 下设置 3GB 开关以获得 1GB 更多内存用于 MATLAB
* 使用 textscan 读取大型文本文件和内存映射功能读取大型二进制文件

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2012-05-12
    • 2014-08-10
    • 2013-11-27
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多