-4
例如: [2017-04-14 03:56:22,085109]
如何迭代日誌文件中的特定時間範圍?
如果這是在事件A發生,我想這條線,其中將有成千上萬行的日誌文件之前走15分鐘的時間,我想通過everyline在此期間迭代和尋找特定的關鍵字。日誌文件中的每一行都具有相同格式的時間戳。
例如: [2017-04-14 03:56:22,085109]
如何迭代日誌文件中的特定時間範圍?
如果這是在事件A發生,我想這條線,其中將有成千上萬行的日誌文件之前走15分鐘的時間,我想通過everyline在此期間迭代和尋找特定的關鍵字。日誌文件中的每一行都具有相同格式的時間戳。
您可以使用開始和結束時間過濾所需的行。
main.py
from datetime import datetime, timedelta
event_time = datetime.strptime('2017-04-14 03:56:22,085109', '%Y-%m-%d %X,%f')
event_start = event_time - timedelta(minutes=15)
def line_date(line):
return datetime.strptime(line[1:27], '%Y-%m-%d %X,%f')
with open('example.log', 'r') as myfile:
lines = filter(lambda x: event_start <= line_date(x) <= event_time,
myfile.readlines())
print(lines)
example.log
[2017-04-13 03:56:22,085109] My old log
[2017-04-14 03:55:22,085109] My log in less than 15 minutes ago
[2017-04-14 03:56:22,085109] My important event
[2017-04-14 03:57:22,085109] Log after my important event
但我建議你使用python3(而不是python2)。 filter
返回一個迭代器,而不是完整的列表。
看看[日期時間](https://docs.python.org/2/library/datetime.html) – ILostMySpoon
我強烈建議你使用一些數據庫來運行這種類型的分析,而不是在python中這樣做。 –
你可以使用['datetime.strptime()'](https://docs.python.org/2/library/datetime.html#datetime.datetime.strptime)classmethod將文件中的時間轉換爲Python' datetime'實例,支持比較。然後,您可以使用它們來選擇文件中處於感興趣區間內的行(假設您在「日期時間」實例中也有事件A的時間)。 – martineau