У меня есть приложение, которое генерирует несколько больших файлов журнала> 500 МБ.
Я написал несколько утилит на Python, которые позволяют мне быстро просматривать файл журнала и находить интересующие данные. Но теперь я получаю несколько наборов данных, в которых файл слишком велик, чтобы загрузить все это в память.
Таким образом, я хочу отсканировать документ один раз, создать индекс, а затем только загрузить часть документа в память, которую я хочу просмотреть за один раз.
Это работает для меня, когда я открываю «файл», читая его по одной строке за раз и сохраняя смещение с помощью file.tell ().
Затем я могу вернуться к этому разделу файла позже с помощью file.seek (offset, 0).
Однако у меня проблема в том, что в файлах журнала может быть UTF-8, поэтому мне нужно открыть их с помощью модуля кодеков (codecs.open(<filename>, 'r', 'utf-8')
). С полученным объектом я могу позвонить и найти, но они не совпадают.
Я полагаю, что кодекам необходимо выполнить некоторую буферизацию или, возможно, он возвращает количество символов вместо байтов от Tell?
Есть ли способ обойти это?