我运行一个程序,每20秒在npy文件中保存数据,但会覆盖旧程序,以更新文件。
昨天经过一天的数据收集后,程序崩溃了,因为有人在错误的时刻做了键盘中断的人为错误。
现在加载npy文件后,我收到错误消息 ValueError:新数组的总大小必须保持不变
我已经尝试了
以open(“test.npy”,“rb”)作为npy: a = np.load(npy)
解决方案,但错误仍然存在。
我认为正在发生的是npy文件中缺少行,但我不知道如何修复它。 npy文件的大小仍为MB,因此可以保存一些东西。
有没有人知道如何修复我的文件并获取其中的数据?
否则我会丢失一天的数据。
非常感谢任何帮助!
编辑:在这里可以找到损坏的文件和一个好的例子,除了数字不同之外应该完全相同。 http://perswww.kuleuven.be/~u0077049/
形状是(1024,3649) dtype是dtype('float64')
答案 0 :(得分:3)
npy format is very simple。它以数据的ascii描述(数据类型,数组大小)开始,然后是平面二进制转储。标头数据总是16个字节的倍数,恰好是float64(8个字节)大小的倍数。
在此示例中,标头为80个字节。在你的情况下,你必须尝试。
import numpy as np
# write npy file
a = 10**np.array(np.linspace(-10, 10, 51), dtype=np.float64)
np.save('foo.npy', a)
# read back
b = np.fromfile('foo.npy', dtype=np.float64)
print(b[10:])
您必须使用reshape
以正确的(Fortran)数组顺序进入它。
我简要地看了一下你的文件;问题似乎是该文件应该是29892688字节但是损坏的文件是29892609,即79字节太短。如果使用79个字节的零填充文件(或使用上述过程读取的数组),则可能会再次读取它。