python,修复损坏的npy文件。ValueError:新数组的总大小必须保持不变

python,修复损坏的npy文件。ValueError:新数组的总大小必须保持不变,python,numpy,Python,Numpy,我运行一个程序,每隔20秒将数据保存在npy文件中,但会覆盖旧文件以更新文件 昨天,经过一天的数据收集,程序崩溃了,原因是有人在错误的时间进行键盘干扰 现在,在加载npy文件后,我得到了错误消息 ValueError:新数组的总大小必须保持不变 我已经试过了 以open(“test.npy”、“rb”)作为npy: a=np.荷载(npy) 解决方案,但错误仍然存在 我认为npy文件中缺少行,但我不知道如何修复它。npy文件的大小仍然以MB为单位,因此保存了一些防御性的内容 有人知道如何修复我的

我运行一个程序,每隔20秒将数据保存在npy文件中,但会覆盖旧文件以更新文件

昨天,经过一天的数据收集,程序崩溃了,原因是有人在错误的时间进行键盘干扰

现在,在加载npy文件后,我得到了错误消息 ValueError:新数组的总大小必须保持不变

我已经试过了

以open(“test.npy”、“rb”)作为npy: a=np.荷载(npy)

解决方案,但错误仍然存在

我认为npy文件中缺少行,但我不知道如何修复它。npy文件的大小仍然以MB为单位,因此保存了一些防御性的内容

有人知道如何修复我的文件并获取其中的数据吗

否则我会损失一天的数据

非常感谢您的帮助

编辑:在这里你可以找到一个坏的文件和一个好的例子,应该是完全相同的,除了数字不同

形状是(10243649) 数据类型是数据类型('float64')

。它以数据的ascii描述(数据类型、数组大小)开始,然后是一个简单的二进制转储。头数据总是16字节的倍数,恰好也是浮点64(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:])
您必须使用
重塑
以正确的(Fortran)数组顺序进入它


我看了一下你的档案;问题似乎是该文件应该是29892688字节,但断开的文件是29892609,即79字节太短。如果用79字节的零填充文件(或通过上述过程读取的数组),则很可能可以再次读取该文件。

您对该数据文件了解多少?您知道它应该包含的数组的维度和数据类型吗?你能把数组上传到某个地方吗?将来你可能想修改你的程序,把数据保存在一个新文件中,然后用os.rename()覆盖旧文件。os.rename()是一个原子操作,这将确保只有在成功创建新文件后才能覆盖旧文件。当我阅读你的回复时,我没有我的帐户详细信息,然后我忘记了回复,很抱歉我的回复太晚,但你无疑是我的英雄韩光年。我所有的数据都保存了。让荷兰人来解决问题吧!