Я пытаюсь создать динамическую функцию: я даю два значения datetime, и он может прочитать журнал между этими значениями datetime, например:
start_point = "2019-04-25 09:30:46.781"
stop_point = "2019-04-25 10:15:49.109"
Я думаю об алгоритме, который проверяет:
- , если даты равны:
- проверить, больше или меньше начальный час 0 знаков (09 -> 0) или меньше, чем час останова 0 знаков (10 -> 1);
- та же проверка с часом 1 символ ((начало) 09 -> 9, (остановка) 10 -> 0);
- такая же проверка с минутой 0 символа;
- тот же чек с минутой 1 символ;
- если даты различаются:
- некоторые другие чеки ...
Не знаю, не изобрету ли я снова колесо, но я действительно заблудился, я перечислю вещи, которые попробовал:
1.
...
cmd = subprocess.Popen(['egrep "2019-04-19 ([0-1][0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9].[0-9]{3}" file.log'], shell=True, stdout=subprocess.PIPE)
cmd_result = cmd.communicate()[0]
for i in str(cmd_result).split("\n"):
print(i)
...
Проблема с этим: я добавил значения из примера, и он не мог работать, потому что у него есть недопустимые диапазоны, такие как символы часа 1, он создает диапазон [9-0], минутный символ 0, а также [3-1] и т. Д..
2.Пробовал следующие решения от Лучший способ отфильтровать журнал по диапазону дат в Python
Любая помощь приветствуется.
РЕДАКТИРОВАТЬ
журналструктура линии:
...
2019-04-25 09:30:46.781 text text text ...
2019-04-25 09:30:46.853 text text text ...
...
РЕДАКТИРОВАТЬ 2
Итак, я попробовал код:
from datetime import datetime as dt
s1 = "2019-04-25 09:34:11.057"
s2 = "2019-04-25 09:59:43.534"
start = dt.strptime('2019-04-25 09:34:11.057','%Y-%m-%d %H:%M:%S.%f')
stop = dt.strptime('2019-04-25 09:59:43.534', '%Y-%m-%d %H:%M:%S.%f')
start_1 = dt.strptime('09:34:11.057','%H:%M:%S.%f')
stop_1 = dt.strptime('09:59:43.534','%H:%M:%S.%f')
with open('file.out','r') as file:
for line in file:
ts = dt.strptime(line.split()[1],'%H:%M:%S.%f')
if (ts > start_1) and (ts < stop_1):
print line
и получил ошибку
ValueError: time data 'Platform' does not match format '%H:%M:%S.%f'
ИтакКажется, я обнаружил другую проблему, которая иногда содержит не дату / время в начале строки.Есть ли способ предоставить регулярное выражение, в котором я предоставляю формат даты и времени?
EDIT 3
Исправлена проблема, когда строка появляется в начале строки, которая вызывает ValueError и исправляет выход индексаошибки диапазона, когда, возможно, возникают другие значения:
try:
ts = dt.strptime(line.split()[1],'%H:%M:%S.%f')
if (ts > start_1) and (ts < stop_1):
print line
except IndexError as err:
continue
except ValueError as err:
continue
Так что теперь он перечисляет не в диапазоне, который я предоставляю, теперь он читает журнал ОТ 2019-02-27 09:38:46.229
ДО 2019-02-28 09:57:11.028
.Есть мысли?