2012-03-23 56 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