2017-05-30 7 views
-4

[2017-04-14 03:56:22,085109]ログファイルの特定の時間範囲を反復処理する方法は?たとえば、

これはイベントAが発生した時間であれば、私はラインの数千人を持っていますログファイルにこの行の前に15分に行きたいと私はその期間中にeverylineを反復処理したいと特定のキーワードを探します。ログファイルのすべての行には、同じ形式のタイムスタンプがあります。

+0

[datetime](https://docs.python.org/2/library/datetime.html)をご覧ください – ILostMySpoon

+0

pythonではなく、この種の解析を実行するためにデータベースを使用することを強くお勧めします。 –

+0

['datetime.strptime()'](https://docs.python.org/2/library/datetime.html#datetime.datetime.strptime)クラスメソッドを使用して、ファイル内の時刻をPythonの '比較をサポートする「datetime」インスタンスが含まれます。それらを使用して、ファイル内で目的の間隔内にある行を選択することができます( 'datetime'インスタンスにもイベントAの時刻があると仮定します)。 – martineau

答えて

0

開始時刻と終了時刻で目的の行をフィルタリングできます。

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 

しかし、私はあなたが(代わりにpython2の)のpython3を使用することをお勧めします。 filterは、完全リストの代わりにイテレータを返します。

関連する問題