У меня есть файл журнала, и его формат будет таким:
INFO 2018/11/20 18:56:00 aaaaaaaaaaaaaaaaaaaaaaaaaaaa
INFO 2018/11/20 18:56:00 bbbbbbbbbbbbbbbbbbbbbb
INFO 2018/11/20 18:56:00 cccccccccccccccccccccccccccc
INFO 2018/11/20 18:56:00 ddddddddddddddddddddddd
WARN 2018/11/20 18:56:23 Some Error Message
java.lang.IllegalArgumentException: blahblahblah
INFO 2018/11/20 19:01:23 eeeeeeeeeeeeeeeeeeeeeeeee
Меня не волнует нормальный журнал, но я хочу извлечь строку, содержащую слово «Exception», котороеЭто должно быть написано в какой-то момент (например, между 18:00:00 и 18:59:59.) Сначала я подумал о том, чтобы получить индекс с помощью функции перечисления при чтении файла журнала.Но с этим я должен прочитать файл, по крайней мере, больше, чем три раза.А также функции linecache загружают каждую строку в файле в памяти.Некоторые файлы имеют размер более 100 МБ, поэтому я знаю, что это плохая идея.
start = 0
end = 0
with open("filename", "f") as f:
for idx, line in enumerate(f):
if re.search("2018(\/|:|)11(\/|:|)20 18:\d{2}:\d{2}", line):
start = idx
break
for idx, line in enumerate(f):
if re.search("2018(\/|:|)11(\/|:|)20 19:\d{2}:\d{2}", line):
end = idx - 1
break
for i in range(start, end):
line = linecache.getline("filename", i)
if 'Exception' in line:
print line
Самая важная проблема заключается в том, что журналы не всегда записываются на xx: 00m или xx: 59m.Например, это началось бы в 18:01:00 или 18:03:31 ..
У меня не было хорошей идеи со вчерашнего дня.Пожалуйста, помогите мне .. Заранее спасибо.