2012-03-23 4 views
0

を選択する問題があり、含まれているログファイルがある:私は、トラフィックを知っている必要があり、パスは/ var/log/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; 

は、最後の2を費やしこのコード

#!/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) 

の日の分しかし、私は彼がlookiたように、私はコードを最適化しますか

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

間違いを得ました最後の2分の文字列のためのngの、その他のファイルは/ 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

関連する問題