Быстрое обновление записи в двоичные файлы? - PullRequest
3 голосов
/ 11 марта 2011

У меня есть 3000 двоичных файлов (каждый размером 40 [МБ]) известного формата (5 000 000 «записей» типа «int32, float32» каждый).они были созданы с использованием метода numpy tofile ().

Метод, который я использую, WhichShouldBeUpdated(), определяет, какой файл (из 3000) должен быть обновлен, а также, какие записи в этом файле должныбыть изменен.Вывод метода следующий:

(1) path_to_file_name_to_update

(2) массив пустых записей с N записями (N - количество записей для обновления),в следующем формате: [(recordID1, newIntValue1, newFloatValue1), (recordID2, newIntValue2, newFloatValue2), .....]

Как видно:

(1) файл для обновления известен только во время выполнения

(2) записи вОбновление также известно только во время выполнения

, что было бы наиболее эффективным способом обновления файла новыми значениями для записей?

Ответы [ 2 ]

7 голосов
/ 11 марта 2011

Поскольку записи имеют фиксированную длину, вы можете просто открыть файл и seek до позиции, которая кратна размеру записи и смещению записи. Для кодирования целых чисел и чисел с плавающей точкой в ​​виде двоичного кода вы можете использовать struct.pack. Обновление : учитывая, что файлы изначально были созданы Numpy, самый быстрый способ может быть numpy.memmap.

1 голос
/ 11 марта 2011

Возможно, вы не заинтересованы в преобразовании данных, но у меня был очень хороший опыт использования HDF5 и pytables для больших двоичных файлов.HDF5 разработан для больших научных наборов данных, поэтому он быстрый и эффективный.

...