Мне нужно найти последнюю метку времени в очень большом файле журнала с неизвестным количеством строк, прежде чем я дойду до строки с меткой времени. Я читаю файл в обратном порядке по одной строке за раз, что обычно происходит очень быстро, за исключением одного случая. Иногда я сталкиваюсь с очень большим блоком (тысячи строк) с известным повторяющимся шаблоном (одна запись показана ниже) и без меток времени:
goal_tolerance[0]:
name: joint_b
position: -1
velocity: -1
acceleration: -1
Поскольку это единственный случай, когда у меня возникает такая проблема, я могу просто добавить кусок кода в цикл, который проверяет его перед поиском в журнале построчно.
Число после goal_tolerance
— это счетчик, увеличивающийся на 1 каждый раз, когда шаблон повторяется, поэтому я хотел бы использовать это число для вычисления начала шаблона. То, что у меня есть сейчас, выглядит примерно так:
if ' goal_tolerance' in line:
gtolnum = line[17:-3]
print gtolnum
startFrom = currentPosition - ((long(gtolnum) + 1) * 95)
break
Однако при этом не учитывается количество символов в счетчике, поэтому я прохожу цикл поиска несколько раз больше, чем необходимо. Есть ли быстрый способ включить эти символы в расчет?
РЕДАКТИРОВАТЬ: я не читаю весь файл, чтобы добраться до этой точки, так как он большой, и у меня есть несколько сотен временных меток для поиска в нескольких сотнях файлов журнала. Моя функция поиска ищет позицию в текстовом файле, затем находит начало строки рядом с этой точкой и читает ее. Вычисление определяет позицию файла, которую я могу использовать с .seek() на основе количества байтов или символов в шаблоне.