2012-03-23 2 views
0

проблема, есть лог-файл, который содержит: путь/вар/Журнал/IPTraf/логиЧтение строк из файла и выбрав питона

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 нг для строки в течение последних двух минут и записал трафик, как это в другом файле/вар/Журнал/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