包含一个大型日志文件。我想最近实现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 ... 如何解决它。感谢
答案 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