textscan:瞬时记忆误差当访问非常大的文件(只有最新的Matlab版本)

2视图(30天)
我使用一个非常大的数据集(500 gb)分成一千多个单个. txt文件(160列/特点/文件,可能超过一百万行,包含一个字符串和数值型变量)的混合物,每个覆盖一个特定的地理区域。文件覆盖大面积、单一可能多达16 gb . txt文件。处理大量的数据,我的每个文件如下:
  • 访问各自. txt文件(“fopen”)
  • 在一个while循环进口250000行用“textscan”
  • 处理数据和出口规模较小的数据集(如果不是第一个循环迭代添加)
  • 重复以上步骤,直到年底达到. txt文件(尽管~ feof)
进口数据的代码是这样的:
文件标识= fopen(文件名);%确定文件名,“文件名”是当前. txt文件的路径
~ feof(文件标识)%进口成堆的250000行到当前. txt文件
%进口数据,“格式varlist”标识格式和列
%的进口。分隔符“|”。
Data = textscan(文件标识,strcat (char (format_varlist),“\ r \ n”250000年),“分隔符”,“|”,
“HeaderLines”、双(first_iteration = = 1),“EndOfLine”,“\ r \ n”,“EmptyValue”1);
结束
这样做让我有效地减少我的数据集的大小,这样我以后可以方便地使用完整的数据集。
我的问题是这样的:对所有文件的代码运行得非常好(包括非常大. txt的)版本2019。2021版本(如果我没记错的话,它没有使用2020 a),直到代码达到代码运行得非常好一个文件太大。在这一点上,代码(瞬间)与一个“内存溢出”错误停止:
的内存。
相关的文档
我怀疑新的“textscan”功能识别访问的文件大小太大加载完全(它),但不承认,我只要250 k线。
我看了看“readtable”命令,但据我所知,这个命令不允许进口小栈的数据一次一次(仅为电子表格)。
有解决方法/解决我的问题吗?当我工作(工作)frequenty与这些类型的代码,我将永远坚持2019年的版本。提前谢谢你的帮助。
3评论
dpb
dpb 2021年5月7日
而且, textscan 完全装入的所以连预赛都能够看明白它会问候。
如果它确实不会工作,我想说,有资格作为一个bug和总违反记录的行为。

登录置评。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年5月12日
指定的编码fopen(),这样的i / o库没有通读整个文件ddetermine编码。现在默认是自动检测,但可以要求读取整个文件证明文件可能包含utf8的假设。
6个评论
dpb
dpb 2021年5月12日
编辑:dpb 2021年5月13日
嗯。但它从未暗示这个特性可能导致内存不足错误的文档。这应该是上面的描述和突出显示 打开外部文件 应该能够报告问题的具体原因和解决而不是倾销“内存不足”的标准错误消息。

登录置评。

更多的答案(2)


史蒂文的主
史蒂文的主 2021年5月13日
我建议你看看MATLAB处理的功能 大文件和大数据 。你听起来就像你描述的方法可以使用 数组的支持 tabularTextDatastore

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!