2012-03-23 6 views
0

을 선택이 포함 된 로그 파일이 있습니다 : 경로/var에/로그/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' 

있어 마지막 두 분 안에 문자열 NG 및

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

답변

1

open 문자열을 반환하지 않습니다/iptraf/로그/로그 다른 파일은/var이 같은 트래픽을 썼다. 한 번에 전체 파일을 읽는 것이 정상이면 data.read().find('timestr')을 사용하십시오. 그렇지 않다면 루프를 제안합니다. http://www.yak.net/fqa/171.html

2

실제로 open() 함수는 String을 반환하지 않습니다. 오히려 File을 리턴합니다. 파일은 반복 가능한, 그래서이 같은 모든 라인을 고려하는 것이 가능할 것이다 : 그래서 당신은 오히려 거꾸로 읽어 줄 시간을 절약하기 위해,

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

것입니다, 가장 최근의 시간은 로그 파일의 끝에됩니다 . 좋은 방법을 찾으려면 this page from the Python Cookbook을 살펴 보는 것이 좋습니다.

+0

빈 로그 파일이 저장됩니다. – nosensus

관련 문제