我不断接收新数据作为numpy矩阵,我需要将它们附加到现有文件中。该文件的结构和数据类型是固定的,因此我需要使用python进行转换。
对于单个矩阵,这有效:
myArr = np.reshape(np.arange(15), (3,5))
myArr.tofile('bin_file.dat')
但是假设我想继续为现有文件添加越来越多的数组,那么numpy.tofile
将覆盖文件中找到的所有内容,而不是附加。
我发现我也可以继续这样做:
bfile = open('bin_file.dat', 'ab')
np.save(bfile, myArr)
bfile.close()
成功添加到二进制文件。但是另一方面,numpy.save
不存储原始二进制数据,而是保存一个标头(我认为),该标头使该文件无法被外部软件读取(我需要使用float32
使用原始二进制文件)。>
用numpy.fromfile
读取文件的现有内容,附加我的数据并再次保存它是不可行的,因为文件会变得非常大,并且所有I / O都将被永久处理。
是否有append
的{{1}}模式?我目前还缺少其他可能性吗?
答案 0 :(得分:1)
可以附加到tofile
文件中:
In [344]: with open('test1',mode='ba+') as f:
...: np.arange(3).tofile(f)
...: np.arange(5).tofile(f)
...:
In [345]: np.fromfile('test1',dtype=int)
Out[345]: array([0, 1, 2, 0, 1, 2, 3, 4])
这将保存不包含形状或dtype信息的数组数据。因此,负载必须指定dtype
。重塑完全取决于您。