Python过滤和保存

时间:2012-09-05 08:30:57

标签: python linux

服务器中的

包含一个大型日志文件。我想最近实现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"

我使用的是代码,但在open(filename)中有一些语法错误。命令是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 import 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

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

2 个答案:

答案 0 :(得分:1)

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

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

你可以从shell man strftime查看要放的内容(以及其他来源!)

答案 1 :(得分: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