在python中将二进制数据保存到文件中

时间:2014-03-12 21:58:08

标签: python loops header binary save

我试图以二进制格式逐行保存数据(最好是npy或npz)。具体来说,我想做的是:

  1. 打开/创建二进制格式文件
  2. 将标题信息保存到文件(作为字典)
  3. 生成一行数据
  4. 将数据行保存到文件
  5. 生成新的数据行
  6. 保存数据文件行 ...重复所有行
  7. 我最近的尝试是使用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
    

    我生成的数据集非常大,因此我无法将整个数据集存储在内存中并保存在最后。

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'模式打开文件并附加要保存的数据。