Есть ли способ распечатать данные из файла журнала между двумя конечными точками в python - PullRequest
0 голосов
/ 13 июля 2020

У меня есть файл журнала, и я пытаюсь распечатать данные между двумя датами.

2020-01-31T20:12:38.1234Z, asdasdasdasdasdasd,...\n
2020-01-31T20:12:39.1234Z, abcdef,...\n
2020-01-31T20:12:40.1234Z, ghikjl,...\n
2020-01-31T20:12:41.1234Z, mnopqrstuv,...\n
2020-01-31T20:12:42.1234Z, wxyzdsasad,...\n

Это образец файла журнала, и я хочу напечатать строки между 2020-01-31T20: 12: 39 до 2020-01-31T20: 12: 41.

Пока мне удалось найти и распечатать начальную строку даты. Я пропустил начальную дату в качестве начальной.

with open("logfile.log") as myFile:
    for line in myFile:
        linenum += 1
        if line.find(start) != -1:
            print("Line " + str(linenum) + ": " + line.rstrip('\n'))

, но как мне продолжить печать до конечной даты?

Ответы [ 3 ]

2 голосов
/ 13 июля 2020

Ответ не в python, а в bash.

sed -n '/2020-01-31T20:12:38.1234Z/,/2020-01-31T20:12:41.1234Z/p' file.log

Вывод:

2020-01-31T20:12:38.1234Z, asdasdasdasdasdasd,...\n
2020-01-31T20:12:39.1234Z, abcdef,...\n
2020-01-31T20:12:40.1234Z, ghikjl,...\n
2020-01-31T20:12:41.1234Z, mnopqrstuv,...\n
0 голосов
/ 13 июля 2020

Поскольку строка времени уже хорошо структурирована в вашем файле, вы можете просто провести простое сравнение строк между интересующими вас моментами времени, не преобразовывая строку в объект datetime.

Используйте csv модуль для чтения в файле с использованием разделителя запятой по умолчанию, а затем функция filter() для фильтрации между двумя датами.

import csv

reader = csv.reader(open("logfile.log"))
filtered = filter(lambda p: p[0].split('.')[0] >= '2020-01-31T20:12:39' and p[0].split('.')[0] <= '2020-01-31T20:12:41', reader)
for l in filtered:
    print(','.join(l))

Edit : я использовал split() для удалите дробную часть строки времени при сравнении строк, так как вас интересует время с точностью до ближайшей минуты, например 2020-01-31T20: 12: 39.

0 голосов
/ 13 июля 2020

если хотите в python,

import time  
from datetime import datetime as dt  

def to_timestamp(date,forma='%Y-%m-%dT%H:%M:%S'):  
    return time.mktime(dt.strptime(date,forma).timetuple()) 

start=to_timestamp(startdate)
end=to_timestamp(enddate)
logs={}
with open("logfile.log") as f:
    for line in f:
        date=line.split(', ')[0].split('.')[0]
        logline=line.split(', ')[1].strip('\n')
        if to_timestamp(date)>=start and to_timestamp(end) <= end:
            logs[date]=logline

...