将元素追加到二进制文件

时间:2017-07-20 18:44:13

标签: python numpy

我的目标是:打开二进制文件,将每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 个答案:

答案 0 :(得分:3)

当然,numpy每次(重新)打开文件进行写入时都会替换/覆盖旧数据。这几乎是大多数tofile()类函数的普遍行为(而且不仅仅是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

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