numpy memmap忽略EOF错误



我将二进制文件映射到具有自定义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忽略文件末尾的不完整元素吗?

答案就在np.memmap文档中:

shape 元组,可选

阵列的所需形状。如果模式=='r',偏移后剩余的字节的数量不是dtype的字节大小的倍数,则必须指定形状。

因此,只需使用常规python函数获取文件大小,找出文件包含多少个完整元素,然后将其作为shape传递。您获得的例外将不再发生。很容易看出为什么查看源代码:https://github.com/numpy/numpy/numpy/blob/blob/ab49be1/numpy/core/core/memmap.py-仅当shape is None

最新更新