numpy memmap忽略EOF错误

时间:2017-05-30 11:26:14

标签: python numpy

我正在将二进制文件映射到内存,该内存具有自定义dtype。我是这样做的:

np.memmap(filename=f, dtype=my_sample_dtype, mode='r')

有时候,二进制文件的结尾会被删除,因为编写它的进程意外地结束了。在这种情况下,numpy抱怨:

ValueError: Size of available data is not a multiple of the data-type size.

现在我可以截断磁盘上的文件使其成为数据类型大小的倍数,但我想要一个不需要触及原始文件的解决方案。我可以告诉numpy只是忽略文件末尾的不完整元素吗?

1 个答案:

答案 0 :(得分:1)

答案就在np.memmap documentation

  

形状元组,可选

     

阵列所需的形状。如果mode =='r'并且offset之后的剩余字节数不是dtype的字节大小的倍数,则必须指定shape。

因此,只需使用常规Python函数来获取文件大小,找出文件包含的完整元素数量,并将其作为shape传递。您获得的例外将不再发生。如果查看源代码,很容易理解为什么:https://github.com/numpy/numpy/blob/ab49be1/numpy/core/memmap.py - 只有在shape is None时才会抛出异常。