我通过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天内显示记录。 而且由于日志文件非常大,而且记录按时间排序,所以如何加快查找记录。
由于
答案 0 :(得分: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()
答案 1 :(得分:0)
您正在比较两种不同的数据结构。 time.strptime()返回结构时间。然而,time.time()给出了自纪元以来的秒数。
您可以使用time.gmtime函数将时间从纪元转换为时间结构,然后比较或使用calendar.gmtime将结构时间转换为自纪元以来的时间,然后进行比较。