代码之家  ›  专栏  ›  技术社区  ›  Kristofer

将元素附加到二进制文件

  •  3
  • Kristofer  · 技术社区  · 7 年前

    二进制的 文件中,每隔100个值存储(追加)到该文件中,并继续这样做,直到完成。为此,我使用以下简单循环来模拟:

    import numpy as np
    import random
    
    alist=[]
    c = 1
    
    for i in range(1000):
        alist.append(i)
        if i == (c*100):
            np.array(alist).tofile("file.bin")
            print alist
            c = c + 1
            alist[:] = [] # clear the list before continuing
    

    file.bin ,我觉得numpy不是附加的,而是替换的,这不是我想要的。如何修复?

    非常感谢。

    1 回复  |  直到 7 年前
        1
  •  4
  •   AGN Gazer    7 年前

    numpy 正在每次(重新)打开文件进行写入时替换/覆盖旧数据。这几乎是大多数人的普遍行为 tofile()

    解决方案:在循环之前打开一个文件句柄进行写入,并将其传递给

    import numpy as np
    import random
    
    alist=[]
    c = 1
    with open("file.bin", "wb") as f: # or choose 'w+' mode - read "open()" documentation
        for i in range(1000):
            alist.append(i)
            if i == (c*100):
                np.array(alist).tofile(f)
                print alist
                c = c + 1
                alist[:] = [] # clear the list before continuing
    

    现在,代码在进入循环之前打开文件 方法重新使用已打开的文件句柄,而不是重新打开,从而覆盖现有文件(在循环运行中创建)。