快速'记录更新'到二进制文件?

时间:2011-03-11 04:09:26

标签: python linux binary numpy

我有3000个已知格式的二进制文件(每个大小为40 [MB])(每个都有5,000,000''记录''int32,float32')。它们是使用numpy tofile()方法创建的。

我使用的方法WhichShouldBeUpdated()确定应更新哪个文件(3000个中),以及应更改此文件中的哪些记录。方法的输出如下:

(1)path_to_file_name_to_update

(2)包含N条记录的numpy记录数组(N是要更新的记录数),格式如下:[(recordID1, newIntValue1, newFloatValue1), (recordID2, newIntValue2, newFloatValue2), .....]

可以看出:

(1)要更新的文件仅在运行时知道

(2)要更新的记录也只在运行时知道

使用记录的新值更新文件的最有效方法是什么?

2 个答案:

答案 0 :(得分:7)

由于记录具有固定长度,您只需打开文件并seek到位置,这是记录大小和记录偏移的倍数。要将整数和浮点数编码为二进制,可以使用struct.pack更新:鉴于文件最初是由numpy生成的,最快的方式可能是numpy.memmap

答案 1 :(得分:1)

您可能对数据转换不感兴趣,但我对HDF5pytables的大型二进制文件有很好的体验。 HDF5专为大型科学数据集而设计,因此速度快,效率高。