我正在将二进制文件映射到内存,该内存具有自定义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只是忽略文件末尾的不完整元素吗?
答案 0 :(得分:1)
形状:元组,可选
阵列所需的形状。如果mode =='r'并且offset之后的剩余字节数不是dtype的字节大小的倍数,则必须指定shape。
因此,只需使用常规Python函数来获取文件大小,找出文件包含的完整元素数量,并将其作为shape
传递。您获得的例外将不再发生。如果查看源代码,很容易理解为什么:https://github.com/numpy/numpy/blob/ab49be1/numpy/core/memmap.py - 只有在shape is None
时才会抛出异常。