2个回答
展开全部
==========这个是某次应求帮人写的程序================
原始连接:http://zhidao.baidu.com/question/61190538.html
==========代码====================================
# -*- coding: cp936 -*-
#上一句不可以删!表示中文路径是GBK编码
import datetime
#处理时间的模块
def sparse(target='log.txt') :
tgfile = file(target,"r")
event={}
#event是一个字典,key是事件的编号,value是数据(可以利用嵌套来扩展数据)
linelog = "Not Empty"
while linelog:
linelog = tgfile.readline()
data = linelog.split(' ')
#按空格将一行数据分为列表
# print data #testing
if len(data) > 4 : #有效的数据行
time1 = data[2][1:] + ' ' + data[3][:-1]
#将时间处理为(字符串):年-月-日 小时:分钟:秒
time2 = datetime.datetime.strptime(time1,'%Y-%m-%d %H:%M:%S')
#将时间识别为datetime类
if data[5] == "begin:" and data[6][:2] == "OK" :
#我不知道有没有 request begin: fail 这个东西,没有就把后半删掉吧!
if not event.has_key(data[0]) :
#第一次发生某id的事件时初始化数据
event[data[0]]=[[1,time2,0]]
#我设置的value是一个列表,每个元素是一次记录,包括[是否没结束,开始时间,结束时间]。
else :
event[data[0]].append([1,time2,0])
#已经有过记录了就在记录后加一条新记录
if data[5] == "end:" and data[6][:2] == "OK" :
#我想应该没有不出现begin就直接end的事件吧……
event[data[0]][-1][0]=0 #最后一条记录中写入:事件已经结束
event[data[0]][-1][2]=time2 #最后一条记录写入:记录结束时间
#如果还要处理其他的什么情形在这里添加if的判断
tgfile.close()
return event
def analysis(target='log.txt') :
event = sparse(target)
#调用上面定于的sparse方法。其实简单的处理用不着这么做的……单纯为了扩展性
static = {}
#用于统计结果的字典(其key和event中的key相同)
for oneevent in event :
#每个事件的记录
static[oneevent]=[0,0,0,0,-1]
#初始化每个事件的统计:[成功发生次数,总发生次数,总发生时间,最大发生时间,最小发生时间]
for onerecord in event[oneevent] :
#每个事件的一次记录
static[oneevent][0] += 1 #总发生次数加一
if onerecord[0] == 0 : #成功事件
static[oneevent][1] += 1
time_delta = onerecord[2] - onerecord[1]
#计算结果是一个timedelta类型
inttimedelta = time_delta.days *24*60*60 + time_delta.seconds
#将时间差转化为以秒计算的整数
if inttimedelta > static[oneevent][3] :
static[oneevent][3] = inttimedelta #统计最大值
if inttimedelta < static[oneevent][4] or static[oneevent][4] < 0 :
static[oneevent][4] = inttimedelta #统计最小值
static[oneevent][2] += inttimedelta
return static
原始连接:http://zhidao.baidu.com/question/61190538.html
==========代码====================================
# -*- coding: cp936 -*-
#上一句不可以删!表示中文路径是GBK编码
import datetime
#处理时间的模块
def sparse(target='log.txt') :
tgfile = file(target,"r")
event={}
#event是一个字典,key是事件的编号,value是数据(可以利用嵌套来扩展数据)
linelog = "Not Empty"
while linelog:
linelog = tgfile.readline()
data = linelog.split(' ')
#按空格将一行数据分为列表
# print data #testing
if len(data) > 4 : #有效的数据行
time1 = data[2][1:] + ' ' + data[3][:-1]
#将时间处理为(字符串):年-月-日 小时:分钟:秒
time2 = datetime.datetime.strptime(time1,'%Y-%m-%d %H:%M:%S')
#将时间识别为datetime类
if data[5] == "begin:" and data[6][:2] == "OK" :
#我不知道有没有 request begin: fail 这个东西,没有就把后半删掉吧!
if not event.has_key(data[0]) :
#第一次发生某id的事件时初始化数据
event[data[0]]=[[1,time2,0]]
#我设置的value是一个列表,每个元素是一次记录,包括[是否没结束,开始时间,结束时间]。
else :
event[data[0]].append([1,time2,0])
#已经有过记录了就在记录后加一条新记录
if data[5] == "end:" and data[6][:2] == "OK" :
#我想应该没有不出现begin就直接end的事件吧……
event[data[0]][-1][0]=0 #最后一条记录中写入:事件已经结束
event[data[0]][-1][2]=time2 #最后一条记录写入:记录结束时间
#如果还要处理其他的什么情形在这里添加if的判断
tgfile.close()
return event
def analysis(target='log.txt') :
event = sparse(target)
#调用上面定于的sparse方法。其实简单的处理用不着这么做的……单纯为了扩展性
static = {}
#用于统计结果的字典(其key和event中的key相同)
for oneevent in event :
#每个事件的记录
static[oneevent]=[0,0,0,0,-1]
#初始化每个事件的统计:[成功发生次数,总发生次数,总发生时间,最大发生时间,最小发生时间]
for onerecord in event[oneevent] :
#每个事件的一次记录
static[oneevent][0] += 1 #总发生次数加一
if onerecord[0] == 0 : #成功事件
static[oneevent][1] += 1
time_delta = onerecord[2] - onerecord[1]
#计算结果是一个timedelta类型
inttimedelta = time_delta.days *24*60*60 + time_delta.seconds
#将时间差转化为以秒计算的整数
if inttimedelta > static[oneevent][3] :
static[oneevent][3] = inttimedelta #统计最大值
if inttimedelta < static[oneevent][4] or static[oneevent][4] < 0 :
static[oneevent][4] = inttimedelta #统计最小值
static[oneevent][2] += inttimedelta
return static
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询