0

我想对日志文件使用 python 创建过滤器。获取最近 7 天的记录。但是当我不知道如何比较时间时。就像当前时间是 2012 年 11 月 9 日一样,我想获取从 2012 年 4 月 9 日到现在的记录

日志文件如

 Sat Sep  2 03:32:13 2012 [pid 12461] CONNECT: Client "66.249.68.236"
 Sat Sep  2 03:32:13 2012 [pid 12460] [ftp] OK LOGIN: Client "66.249.68.236", anon     password "gxxglxxxxt@google.com"
 Sat Sep  2 03:32:14 2012 [pid 12462] [ftp] OK DOWNLOAD: Client "66.249.68.236",   "/pub/10.5524/100001_101000/100022/readme.txt", 451

我用这个

  def OnlyRecent(line):
       print time.strptime(line.split("[")[0].strip(),"%a %b %d %H:%M:%S %Y")
       print time.time()
    if  time.strptime(line.split("[")[0].strip(),"%a %b %d %H:%M:%S %Y") < time.time():
        return True
    return False

但它显示

   (2012, 9, 2, 3, 32, 13, 5, 246, -1) 
    1347332968.08
   (2012, 9, 2, 3, 32, 13, 5, 246, -1)
    1347332968.08
   (2012, 9, 2, 3, 32, 14, 5, 246, -1)
    1347332968.08

选择多行后,如何创建新文件(* .txt 或日志)以将它们存储在脚本中,文件名使用当前日期

谢谢

4

3 回答 3

1

您可以使用 time.mktime 将时间元组转换为 unix 时间戳。

>>> import time
>>> time.mktime((2012, 9, 2, 3, 32, 13, 5, 246, -1))
1346527933.0
于 2012-09-11T03:31:55.157 回答
1

使用 datetime.datetime.strptime 和 datetime.datetime.now() 使用相同的数据结构:

from datetime import datetime 
def OnlyRecent(line):
  return  datetime.strptime(line.split("[")[0].strip(),"%a %b %d %H:%M:%S %Y") < datetime.now()
于 2012-09-11T03:33:06.370 回答
1

而不是time使用datetimeand timedelta

seven_days = datetime.timedelta(days=7)

def OnlyRecent(line):
    dt = datetime.datetime.strptime(line.split('[')[0].strip(), "%a %b %d %H:%M:%S %Y")
    return dt > datetime.datetime.now() - seven_days
于 2012-09-11T03:36:17.460 回答