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

我甚至不知道从哪里开始。。我读过的所有内容都是如何在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:%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感谢您的提示。写了一些对我有用的东西,但不知道你对代码有什么改进?干杯