2012-12-07 183 views
3

如果存在np.fromfile()的最大文件大小?我试图读取一个48GB的文件,约2.1e9的记录(每个记录有5个值)。np.fromfile文件大小的最大限制?

它工作时,我限制计数8e7:

fromfile(filename, dtp, int(8e7)) 
Out[69]: 
array([(1, 244025.0, 1.1666666269302368, 360.1666564941406, 50.0), 
     (2, 244025.0, 1.1666666269302368, 360.5, 50.0), 
     (3, 244025.0, 1.1666666269302368, 360.8333435058594, 50.0), ..., 
     (255138, 244131.0, 1128.9346923828125, 461.38494873046875, 49.5), 
     (255139, 244131.0, 1143.77783203125, 473.2532958984375, 49.5), 
     (255140, 244131.0, 1150.4803466796875, 464.6799011230469, 49.5)], 
     dtype=[('ntrac', '<i4'), ('ints', '<f8'), ('x', '<f4'), ('y', '<f4'), ('z', '<f4')]) 

但是,当计数设为9e7所有值都将读为零:

In [70]: fromfile(filename, dtp, int(9e7)) 
Out[70]: 
array([(0, 0.0, 0.0, 0.0, 0.0), (0, 0.0, 0.0, 0.0, 0.0), 
     (0, 0.0, 0.0, 0.0, 0.0), ..., (0, 0.0, 0.0, 0.0, 0.0), 
     (0, 0.0, 0.0, 0.0, 0.0), (0, 0.0, 0.0, 0.0, 0.0)], 
     dtype=[('ntrac', '<i4'), ('ints', '<f8'), ('x', '<f4'), ('y', '<f4'), ('z', '<f4')]) 
+0

32位或64位Python? –

+0

64位在Mac OS X上通过macports安装。 – brorfred

+0

你可以用'sys.maxsize'检查它确实是64位吗? – seberg

回答

2

看起来这的确是在Mac OS X中的错误

见numpy的下列错误:https://github.com/numpy/numpy/issues/2806

我在我的分支叉建议修复,将有助于有人来验证它,请参阅: https://github.com/sauliusl/numpy/tree/bug_large_save

+0

太好了,谢谢!是的,它似乎是非常大的文件被操作系统拙劣的。我开始怀疑这是否会影响其他文件类型。我从scipy编写大型.mat和netcdf文件也遇到了很大的问题。 – brorfred

2

这有可能是在Mac中的错误OSX的fread()例程。和fwrite()函数确实有类似的bug:https://github.com/numpy/numpy/issues/574

您可以通过编写一个简单的C测试程序(如一个贴在机票有),然后抱怨苹果或许检查这...

解决方法是以足够小的块读取文件。

编辑:读取错误报告太快---和fwrite()的错误是不完全相似,但我认为有关的OS错误不能被排除......