我运行一个程序,每隔20秒将数据保存在一个npy文件中,但会覆盖旧文件,以更新文件.
昨天经过一天的数据收集后,程序崩溃了,因为有人在错误的时刻做了键盘中断的人为错误.
现在加载npy文件后,我收到错误消息
ValueError:新数组的总大小必须保持不变
我已经试过了
使用open(“test.npy”,“rb”)作为npy:
a = np.load(npy)
解决方案但错误仍然存在.
我认为正在发生的是npy文件中缺少行,但我不知道如何修复它. npy文件仍然具有MB应该具有的大小,因此保存了一些defenitely.
有谁知道如何修复我的文件并获取其中的数据?
否则我会放松一天的数据.
很感谢任何形式的帮助!
编辑:这里可以找到破碎的文件和一个好的例子,除了数字不同之外应该完全相同. http://perswww.kuleuven.be/~u0077049/
形状是(1024,3649)
dtype是dtype(‘float64’)
解决方法:
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个字节的零填充文件(或使用上述过程读取的数组),则可能会再次读取它.
标签:python,numpy
来源: https://codeday.me/bug/20190628/1311480.html