-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
しかし、私はあなたが(代わりにpython2の)のpython3を使用することをお勧めします。 filter
は、完全リストの代わりにイテレータを返します。
[datetime](https://docs.python.org/2/library/datetime.html)をご覧ください – ILostMySpoon
pythonではなく、この種の解析を実行するためにデータベースを使用することを強くお勧めします。 –
['datetime.strptime()'](https://docs.python.org/2/library/datetime.html#datetime.datetime.strptime)クラスメソッドを使用して、ファイル内の時刻をPythonの '比較をサポートする「datetime」インスタンスが含まれます。それらを使用して、ファイル内で目的の間隔内にある行を選択することができます( 'datetime'インスタンスにもイベントAの時刻があると仮定します)。 – martineau