0

我通过python为日志文件创建过滤器,例如

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

脚本是

import time
f= open("/opt/CLiMB/Storage1/log/vsftp.log")
def OnlyRecent(line):
    if  time.strptime(line.split("[")[0].strip(),"%a %b %d %H:%M:%S %Y") < time.time()-(60*60*24*2):
       return True
    return False

for line in f:
      if OnlyRecent(line):
         print line

f.close()

但是当我运行这个脚本时,它没有显示任何东西。为什么它不能显示 2 天内发生的记录。而且由于日志文件很大,而且记录是按时间排序的,那么如何加快查找记录的速度。

谢谢

4

2 回答 2

3

由于最终连接,该脚本在完全处理内存中的整个文件之前不会打印任何内容。

如果要按原样打印,请使用循环并打印过滤器返回的每一行。

import time
f = open("/opt/CLiMB/Storage1/log/vsftp.log")
f.readline() # Not sure why you're doing this, but retained to replicate behaviour

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

for line in f:
    if OnlyRecent(line):
        print line

f.close()
于 2012-09-10T09:40:36.203 回答
0

您正在比较两种不同的数据结构。time.strptime()返回一个结构时间。然而, time.time() 给出了自纪元以来的秒数。

您可以使用time.gmtime函数将自纪元以来的时间转换为时间结构,然后进行比较或使用calendar.gmtime将结构时间转换为自纪元以来的时间,然后进行比较。

于 2012-09-11T03:22:50.440 回答