问题是,有一个日志文件包含:path / 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;
我需要知道本代码日期最后两分钟的流量
#!/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'
如何优化代码,以便他在最后两分钟内查找字符串,并在其他文件/ var / log / iptraf / logs中记下这样的流量
Fri Mar 23 12:46:30 2012; TCP; eth0; 52 bytes;
Fri Mar 23 12:47:31 2012; TCP; eth0; 52 bytes;
答案 0 :(得分:2)
实际上,open()
函数不返回String。相反,它返回File
。文件是可迭代的,因此可以考虑这样的每一行:
for line in data:
if timestr in line:
output.write(line)
事情是,您最近的时间将在日志文件的末尾,所以为了节省时间,您宁愿向后阅读。我建议您查看this page from the Python Cookbook以获得一个很好的方法。
答案 1 :(得分:1)
open
不会返回字符串。如果您可以立即阅读整个文件,请使用data.read().find('timestr')
。如果没有,我建议循环,请参阅http://www.yak.net/fqa/171.html