我的目标是:打开二进制文件,将每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不会附加而是替换它不是我想要的。如何解决?
谢谢。
答案 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>