我试图以二进制格式逐行保存数据(最好是npy或npz)。具体来说,我想做的是:
我最近的尝试是使用savez。这样做时,我会覆盖上一行数据。我想追加数据,但不要覆盖它。代码的基本思想如下:
header = {'TIME': 20, 'POSITION': 30}
testfile = open('test.npz', 'wb')
np.savez(testfile, header)
testfile.close()
i = 0
while i < 5:
data = [i]*100 # generate row of data
testfile = open('test.npz', 'wb')
np.savez(testfile, data) #append data to current file
testfile.close()
i += 1
我生成的数据集非常大,因此我无法将整个数据集存储在内存中并保存在最后。
答案 0 :(得分:0)
当您使用标记'wb'
打开文件时,它意味着覆盖,二进制。您希望使用标记'ab'
作为append / binary。
此外,您的打开/关闭模式是不必要的。您可以将文件保持打开状态,并不时将更改刷新到磁盘,以确保写入部分进度。我会像你这样包装你的整个代码:
with open('test.npz', 'wb') as testfile:
header = {'TIME': 20, 'POSITION': 30}
np.save(testfile, header)
i = 0
while i < 5:
data = [i]*100 # generate row of data
np.save(testfile, data) #append data to current file
i += 1
当然,如果你有想要附加到文件的新数据,请将'wb'
更改为'ab'
,但是你可能想要用额外的逻辑分割出标题信息的写入,也许可以拆分这个分为两个单独的函数(即create_new
创建文件并写入标题,save_data
以'ab'
模式打开文件并附加要保存的数据。