Python numpy memmap忽略EOF错误

Python numpy memmap忽略EOF错误,python,numpy,Python,Numpy,我正在将一个二进制文件映射到内存,内存有一个自定义的数据类型。我是这样做的: 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. 现在我可以截断磁盘上的文件,使其成为数据类型大小的倍数,但我想

我正在将一个二进制文件映射到内存,内存有一个自定义的数据类型。我是这样做的:

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忽略文件末尾的不完整元素吗?

答案就在下面的列表中:

形状:元组,可选

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


因此,只需使用常规Python函数获取文件大小,计算文件包含多少完整元素,并将其作为形状传递。您得到的异常将不再发生。如果查看源代码,很容易看出原因:-只有当shape为None时才能引发异常。

为什么不修改磁盘上的文件以修复它?有没有可能修复写入损坏记录的程序?每个文件有几GB,并且存储在只读位置。另一个程序因为电源故障而停止编写,所以它没有bug。软件需要对此类故障具有鲁棒性。您知道阵列的形状至少应为dims-1吗?您可以使用os.statf.st_size获得文件大小