と一致していません:datetime.datetimeの形式は は基本的にスクリプトの目的は、私がログファイルに日付と時刻を比較するには以下のスクリプトを作成した
がログ・ファイルを通過します、それが比較されます現在のタイムスタンプを持つログ行の日付。現在の時刻の1時間前のログ行があれば、その行が表示されます。
サンプルログラインは: 10.x.x.x - - [16/6月/ 2016:09:28:58 -0300] "POST/XXXXX HTTP/1.1" 200 444 10.x.x.x. - - [16/6月/ 2016:09:29:02 -0300] "POST/xxxxxはHTTP/1.1" 200 1483
私は取得していますエラーは次のとおりです。
Current Time 2016-06-16 09:46:55.887691
LastHour 2016-06-16 08:46:55.887701
Traceback (most recent call last):
File "log.py", line 41, in <module>
log_date = datetime.datetime.strptime(match.group(2).rstrip(), "%d/%b/%Y:%H:%M").replace(year=datetime.date.today().year)
File "/usr/lib/python2.7/_strptime.py", line 325, in _strptime
(data_string, format))
ValueError: time data '0/Apr/2016:00:00' does not match format '%d/%b/%Y:%H:%M'
import re
import os
import subprocess
import os
import datetime
LOG_FILE="access_log"
#xxxxxxxx - - [26/Apr/2016:14:38:52 -0300] "xxxxxxx HTTP/1.1" 200 357
get_date = re.compile('(.*)([0-9]+/[A-Z-a-z]+/[0-9]+:[0-9]+:[0-9]+)(.*)')
current_time = datetime.datetime.now()
lastHourTime = datetime.datetime.now() - datetime.timedelta(hours = 1)
print ('Current Time %s' % current_time)
print ('LastHour %s' %lastHourTime)
def _read_log():
with open (LOG_FILE,'r')as f:
content=f.readlines()
return content
if __name__ == '__main__':
log_file=_read_log()
for line in log_file:
#GEt the Date only from the log file Feb 7 07:33:19
match=re.search(get_date,line)
if match:
#Capture only the date field so taht we can compare iet with (current_time and lastHourTime.
#log_date1= match.group(2)
#print log_date1
log_date = datetime.datetime.strptime(match.group(2).rstrip(), "%d/%b/%Y:%H:%M").replace(year=datetime.date.today().year)
#print ('Log Date %s' %log_date)
#Check if log_date is greater then lastHourTime and less then current_time
if log_date < current_time and log_date > lastHourTime :
print "Matching"
print line
else:
print "Not Matching"
print line
「
私はあなたが正しく日付を読んだとは思いません。 '' 0/Apr/2016:00:00 ''に変換しようとしている文字列を見ると、これには1日がないことがわかります(エラーは '0'です)。 。 – nbryans