将numpy矩阵附加到没有numpy标头的二进制文件中

时间:2018-06-28 15:32:44

标签: python numpy binary

我不断接收新数据作为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}}模式?我目前还缺少其他可能性吗?

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。重塑完全取决于您。