2017-09-08 9 views
-4

私はどこから始めるべきかわかりません。私が読んだのは、bashでやる方法pythonでPython:1時間前から今までのログファイルに行を抽出するには

例ログの行:我々は時間を計算し、だから、それらを比較する機能を必要とするすべての

Sep 8 13:25:02 blah 
Sep 8 13:25:02 blahblah 
Sep 8 13:25:02 blahblahblah 
+3

少なくとも試してみるべきです。私はこの正確なタスクの解決策がインターネット上で少なくとも100倍以上あることを賭けることができます – AK47

+1

純粋なコードの書き込み要求はスタックオーバーフローに関するトピックではありません - 質問は*特定の*プログラミング問題に関連しています は、喜んであなた自身で書くのを手伝ってくれます! [何を試してみましたか](https://stackoverflow.com/help/how-to-ask)とどこにいるのか教えてください。 これはまた、あなたの質問によく答えるのにも役立ちます。 –

+0

ヒント。 "Sep 8 13:25:02"のような文字列を算術演算に使う必要があります。 'datetime'モジュールと' datetime.datetime.strptime() 'メソッドを見てください。 – BoarGules

答えて

0

私はどこから始めればわからなかった、言ったように...

読ん@BoarGulesはあなたと算術演算を行うことができますし、datetimeを使用するように何かに日付/時間を作るために持っ上のヒントの後、私は次のように作ってみた:

#!/usr/bin/env python 

from datetime import datetime, timedelta 

syslog="local4" 

now = datetime.now().strftime('%b %_d %H:%M:%S') 
hour = datetime.now() - timedelta(hours=1) 
hour_ago = hour.strftime('%b %_d %H:%M:%S') 

with open(syslog,'r') as f: 
    for line in f: 
     if int(line.split()[1]) < 10: 
      d = line.split()[0] + ' ' + line.split()[1] + ' ' + line.split()[2] 
     else: 
      d = line.split()[0] + ' ' + line.split()[1] + ' ' + line.split()[2] 
     if d >= hour_ago and d <= now: 
      print line.strip() 

私がそれを改善することに提案を行うが、オープンしたいと思います何のために働くようです。 私はちょうどif int(line.split()[1]) < 10:を行うことが最初の分割の間のスペースを解消する最良の方法であると思っています。

もう一度おねがいします。

0

まず:

import datetime 
def timeDiff(time1,time2): 
    timeA = datetime.datetime.strptime(time1, "%H:%M:%S") 
    timeB = datetime.datetime.strptime(time2, "%H:%M:%S") 
    newTime = timeA - timeB 
    return newTime 

のは、あなたがlogfile.txtといういるとあなたはそれがだreadedと仮定しましょう行:

import re 

with open logfile.txt as my_file : 

line_counter = sum (1 for line in logfile.txt) 
for i in range (line_counter): 
    line = my_file.readline() #-> Sep 8 13:25:02 blah 

    my_time = re.findall('\d+:\d+:\d+',line) #-> [13:25:02] 

    if (timeDiff(re.findall('\d+:\d+:\d+',time.asctime(time.localtime()))[0] , re.findall('\d+:\d+:\d+',i)[0])) <=1 : # 1 hours ago 

    print line 

注1:re.findall('\d+:\d+:\d+',time.asctime(time.localtime()))あなたの現在の時間を与えるとしますreはあなたに私が使用したリストの出力を与えるためre.findall('\d+:\d+:\d+',time.asctime(time.localtime()))[0]

注2:私は彼らと印刷行を比較するために、私のdateDill FUNCを使用

0

ますログファイルからすべての行を読み込む必要があり、行ごとに何らかのチェックを行う必要があります。

import datetime 

# get current time 
now = datetime.datetime.now() 

with open('yourlogfile', 'r') as f: 
    # go through each line 
    for ln in f: 
     # ex: 'Sep 8 13:25:02 etcetcetc' 
     stime = f.strip().split(' ') 
     completeTime = stime[0]+ ' ' + stime[1]+ ' ' + stime[2] 
     datefstr = datetime.datetime.strptime(completeTime, '%b %d %H:%M:%S') 
     if (now.hour - datefstr.hour) < 1 and (now.minute - datefstr.minute) < 60: 
      # do your thing here 
     else: continue 
関連する問題