【问题标题】:Max limit for file size with np.fromfile?np.fromfile 文件大小的最大限制?
【发布时间】:2012-12-07 19:13:04
【问题描述】:

如果 np.fromfile() 有最大文件大小?我正在尝试读取一个 48GB 的​​文件,其中包含大约 2.1e9 条记录(每条记录有 5 个值)。

当我将计数限制为 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')])

【问题讨论】:

  • 32 位还是 64 位 Python?
  • 64 位 Mac OS X 上通过 macports 安装。
  • 你能和sys.maxsize确认它真的是64位吗?
  • 了解自己,我在写之前检查过! sys.maxsize:9223372036854775807; sys.maxsize > 2**32: 真
  • 是的,我怀疑它对你有帮助,真的不明白这怎么可能,这里发生的所有事情实际上都是对fread的调用,并且该调用的类型必须非常正确,否则你会得到错误。

标签: python numpy scipy


【解决方案1】:

看起来这确实是 Mac OS X 的一个错误。

在 numpy 中查看以下错误:https://github.com/numpy/numpy/issues/2806

我在我的分支分支中提出了修复建议,可以帮助某人验证它,请参阅: https://github.com/sauliusl/numpy/tree/bug_large_save

【讨论】:

  • 太好了,谢谢!是的,操作系统似乎破坏了非常大的文件。我开始怀疑这是否也会影响其他文件类型。从 scipy 编写大型 .mat 和 netcdf 文件时,我也遇到了很大的问题。
【解决方案2】:

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

您可以通过编写一个简单的 C 测试程序(例如附在票证上的那个)来检查这一点,然后向 Apple 投诉...

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

编辑:阅读错误报告太快 --- fwrite() 错误并不完全相同,但我认为不能排除操作系统错误...

【讨论】:

    最近更新 更多