2012-12-07 219 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錯誤不能被排除......