1

在服务器中包含一个大的日志文件。我想实现最近5天的日志数据。这是日志文件的一部分

    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
    Sat Jun  2 03:32:22 2012 [pid 12677] CONNECT: Client "66.249.68.236"
    Sat Jun  2 03:32:23 2012 [pid 12676] [ftp] OK LOGIN: Client "66.249.68.236", anon password "xxxxxbot@google.com"

我使用该代码,但在打开(文件名)中有一些语法错误。命令是 python ex.py vsftp.log 有人可以帮我解决它。并创建一个新的日志文件来保存输出行。谢谢

from sys import argv 
import time
script, filename = argv
with open(filename) as f:
    lines= [line for line in f]
def OnlyRecent(line):
    return time.strptime(line.split("[")[0].strip(),"%a %b %d %H:%M:%S %Y")   <(time.time()-(60*60*24*5))
print "\n".join(filter(OnlyRecent,lines))

但是当我使用代码时,它可以工作吗?为什么从 sys 导入 argv

  script, filename = argv

  txt = open(filename)

  print "Here's your file %r:" % filename
  print txt.read()

当我创建 ex.py 文件时

  f =open('/opt/CLiMB/Storage1/log/vsftp.log','r')
  print f.readline

键入 python ex.py

它在 0x 处显示文件对象的内置方法 readline ... 如何解决它。谢谢

4

2 回答 2

1

格式日期字符串错误,应该是

"%a %b %d %H:%M:%S %Y"

您可以man strftime从外壳中查看要放置的内容(在其他来源中!)

于 2012-09-05T08:41:50.353 回答
1

您可以检查 h,m 和 s 是否为 strptime 中的大写字母,例如 "%a %b %d %H:%M:%S %Y":

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

另请注意,如果日期时间错误,或者日志文件中有一条多行语句会搞砸它,您可能会用 try/except 语句将返回值括起来。

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

对于 Python 2.4.3,我认为您正在使用的文件读取语法不起作用。尝试类似:

f = open('file.txt', 'r')
lines = f.readlines()
f.close()

更多关于 2.4.3 的文档在这里:http ://docs.python.org/release/2.4.3/tut/node9.html#SECTION009200000000000000000

于 2012-09-05T08:44:09.900 回答