Проблема может быть разделена на две половины:
- Выбор (двоичного?) Формата фиксированной длины для ваших записей и возможность сериализации / десериализации ваших данных из него;результат должен быть фиксированной длиной строки.
- Поиск и чтение / запись таких записей в файле.
Для пункта 1 существует много возможностей.Вы можете использовать модуль struct
для генерации / чтения двоичных данных, которые обычно имеют длину.
Более низкая технология, но все еще действующая, возможность просто работать с текстовыми записями фиксированного размера, каждое поле заполнено соответствующим образом.с пробелами или чем-то еще.Они могут быть легко сгенерированы с помощью bytes.format
и разделены при чтении с использованием простой нарезки.
Только будьте осторожны, чтобы для правильной работы ваши поля должны быть соответствующим образом отформатированы / дополнены как byte строк, а не как Unicode (если вы собираете запись как строку Unicodeи затем преобразует его в UTF-8, он может изменить длину, поскольку UTF-8 является кодировкой переменной длины).
Что касается второй части, она самая простая: просто откройте файл в двоичном режиме (вы не хотите, чтобы перевод новой строки связывался с вашими байтами), используйте метод seek
чтобы перейти к нужной записи (используя в качестве позиции номер записи, умноженной на ее размер) для чтения / записи, а затем используйте read
(передавая размер записи) или write
(передавая запись соответствующего размера).