将元素添加到二进制文件

3

我的目标是:打开一个二进制文件,将每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并没有追加,而是替换了原有内容,这不是我想要的结果。如何解决?
谢谢。

是的,np.ndarray.tofile 每次调用都会覆盖文件。 - juanpa.arrivillaga
1个回答

4
当然,每次您打开文件进行写入时,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()方法重复使用已经打开的文件句柄,而不是重新打开并覆盖已经存在的文件(在循环运行中创建的)。

请问您能告诉我如何实现您的解决方案吗?谢谢。 - Kristofer
非常感谢。非常感激。 - Kristofer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接