私はどこから始めるべきかわかりません。私が読んだのは、bashでやる方法pythonでPython:1時間前から今までのログファイルに行を抽出するには
例ログの行:我々は時間を計算し、だから、それらを比較する機能を必要とするすべての
Sep 8 13:25:02 blah
Sep 8 13:25:02 blahblah
Sep 8 13:25:02 blahblahblah
私はどこから始めるべきかわかりません。私が読んだのは、bashでやる方法pythonでPython:1時間前から今までのログファイルに行を抽出するには
例ログの行:我々は時間を計算し、だから、それらを比較する機能を必要とするすべての
Sep 8 13:25:02 blah
Sep 8 13:25:02 blahblah
Sep 8 13:25:02 blahblahblah
私はどこから始めればわからなかった、言ったように...
読ん@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:
を行うことが最初の分割の間のスペースを解消する最良の方法であると思っています。
もう一度おねがいします。
まず:
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を使用
ますログファイルからすべての行を読み込む必要があり、行ごとに何らかのチェックを行う必要があります。
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
少なくとも試してみるべきです。私はこの正確なタスクの解決策がインターネット上で少なくとも100倍以上あることを賭けることができます – AK47
純粋なコードの書き込み要求はスタックオーバーフローに関するトピックではありません - 質問は*特定の*プログラミング問題に関連しています は、喜んであなた自身で書くのを手伝ってくれます! [何を試してみましたか](https://stackoverflow.com/help/how-to-ask)とどこにいるのか教えてください。 これはまた、あなたの質問によく答えるのにも役立ちます。 –
ヒント。 "Sep 8 13:25:02"のような文字列を算術演算に使う必要があります。 'datetime'モジュールと' datetime.datetime.strptime() 'メソッドを見てください。 – BoarGules