2012-03-23 46 views
0

的问题是,有一个包含日志文件:路径/无功/日志/ iptraf/LOGI阅读从一个文件行,并选择一条巨蟒

Fri Mar 23 12:42:19 2012; TCP; eth0; 52 bytes; 
Fri Mar 23 12:43:21 2012; TCP; eth0; 52 bytes; 
Fri Mar 23 12:44:28 2012; TCP; eth0; 52 bytes; 
Fri Mar 23 12:45:29 2012; TCP; eth0; 52 bytes; 
Fri Mar 23 12:46:30 2012; TCP; eth0; 52 bytes; 
Fri Mar 23 12:47:31 2012; TCP; eth0; 52 bytes; 

我需要知道的交通度过的最后两个本规范

#!/usr/bin/env python 
#-*- coding: utf-8 -*- 
import re, sys, datetime 

cutoff = datetime.datetime.now() - datetime.timedelta(minutes=2) 
timestr = str(cutoff)[11:19] 

# Open files: 
data = open('/var/log/iptraf/logi', 'r') 
output = open('/var/log/iptraf/logs', 'w') 
dd=data.find('timestr') 
output.write("%s" %dd) 

之日起分钟,但我得到了错误

dd=data.find('timestr') 
AttributeError: 'file' object has no attribute 'find' 

我怎么优化代码,以便他looki纳克在最后两分钟的字符串和其他文件/ var写下交通这样的/日志/ iptraf /日志

Fri Mar 23 12:46:30 2012; TCP; eth0; 52 bytes; 
Fri Mar 23 12:47:31 2012; TCP; eth0; 52 bytes; 

回答

1

open没有返回一个字符串。如果您确定一次读取整个文件,请使用data.read().find('timestr')。如果没有,我会建议一个循环,看http://www.yak.net/fqa/171.html

2

确实,open()函数不会返回一个字符串。相反,它返回一个File。文件是可迭代的,所以这将是可能考虑每一行是这样的:

for line in data: 
    if timestr in line: 
     output.write(line) 

事情是,最近的时间将在你的日志文件的末尾,所以为了节省时间你宁愿倒着读。我建议看看this page from the Python Cookbook,这是一个很好的方法。

+0

保存在一个空的日志文件中 – nosensus 2012-03-23 09:28:11