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

use*_*424 3 python linux binary numpy

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

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

(1) path_to_file_name_to_update

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

可以看出:

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

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

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

sam*_*ias 7

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