Python:如何从一小时前到现在提取日志文件中的行
我甚至不知道从哪里开始。。我读过的所有内容都是如何在bash中完成,但我希望用python编写它 日志行示例:Python:如何从一小时前到现在提取日志文件中的行,python,logging,extract,Python,Logging,Extract,我甚至不知道从哪里开始。。我读过的所有内容都是如何在bash中完成,但我希望用python编写它 日志行示例: Sep 8 13:25:02 blah Sep 8 13:25:02 blahblah Sep 8 13:25:02 blahblahblah 首先,我们需要一个函数来计算时间并进行比较,以便: import datetime def timeDiff(time1,time2): timeA = datetime.datetime.strptime(time1, "%H:%M
Sep 8 13:25:02 blah
Sep 8 13:25:02 blahblah
Sep 8 13:25:02 blahblahblah
首先,我们需要一个函数来计算时间并进行比较,以便:
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并读取了它的行:
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.asctimetime.localtime将为您提供当前时间,因为re将为您提供我使用的列表输出re.findall'\d+:\d+:\d+',time.asctimetime.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
就像我说的,我不知道从哪里开始 在阅读了@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 intline.split[1]<10:是否是计算第一次拆分之间空格的最佳方法
再次感谢。你至少应该尝试一下。我敢打赌,这个确切任务的解决方案是在互联网上,至少100倍的超压代码编写请求在堆栈溢出上是离题的-我们希望这里的问题与特定的编程问题有关-但我们很乐意帮助您自己编写!告诉我们,你被困在哪里了。这也将帮助我们更好地回答您的问题。提示。你需要把像Sep 8 13:25:02这样的字符串转换成你可以用来做算术的东西。查看datetime模块和方法datetime.datetime.strptime.@BoarGules感谢您的提示。写了一些对我有用的东西,但不知道你对代码有什么改进?干杯