利用python语言实现读取log文件。并分析文件,计算平均每个事务所用的平均时间,最长,最短时间,统计不完整事务(就是有开始没结束的情况)的总数和详情
部分源码:
# -*- coding: cp936 -*-
#操作系统:winxp
#python版本:2.5
#匹配事务并计算
from datetime import datetime
from DTime import DTime
from DataConvert import DataConvert
class log:
def log(self):
#放置未匹配完成的数据
temp=dict()
#存放待匹配的数据
tempTime=dict()
#存放已匹配完成的数据
avg=dict()
dt=DTime()
i=0
b=True
dc=DataConvert()
items=dc.getData()
strs=items.values()
datas=items.keys()
while b:
try:
#判断数据在之前是否已经存在
order=strs[i][0]
key=strs[i][5]
dtime=strs[i][2]
if temp.has_key(key):
#调用时间转换函数
usetime=dt.convertTime(tempTime.get(key))
othertime=dt.convertTime(dtime)
if usetime>othertime:
usetime=usetime-othertime
elif usetime<othertime:
usetime=othertime-usetime
else:
usetime=usetime-usetime
temp.pop(key)
tempTime.pop(key)
avg[order]=usetime
else:
tempTime[key]=dtime
for k in datas:
if items.get(k)==strs[i]:
temp[key]=k
i=i+1
except:
b=False
print '共处理',i,'条数据'
dc.storeTemp(temp)
return (avg,temp)
#x=log()
#t=x.log()
# -*- coding: cp936 -*-
#从日志文件中得到数据,并处理得到的数据
from File import File
from filterData import filterData
class DataConvert:
def getData(self):
i=0
b=True
self.f=File()
data=dict()
ls=self.f.loadLog()
fd=filterData()
strs=fd.filterStr(ls)
print '加载上次未匹配完的数据'
t=self.f.loadTemp()
if t!=None:
if len(t)!=0:
for value in t.values():
strs.append(value)
print '成功添加上次未匹配完的数据',len(t),'条'
#分解数据
while b:
try:
order=strs[i].split(' ',1)
ip=order[1].split(' [',1)
dtime=ip[1].split('] ',1)
desc=dtime[1].split(': ')
answer=desc[1]
key=strs[i].split(' [')
if data.get(strs[i])!=strs[i]:
l=list()
l.append(order[0])
l.append(ip[0])
l.append(dtime[0])
l.append(desc[0])
l.append(answer)
l.append(key[0])
data[strs[i]]=l
i=i+1
except:
b=False
print '数据转换处理完毕'
return data
def storeTemp(self,temp):
self.f.storeTemp(temp)
#dc=DataConvert()
#dc.getData()
# -*- coding: cp936 -*-
#时间转换类
from datetime import datetime
class DTime:
#datetime(*(time.strptime(date_string, format)[0:6]))
def convertTime(self,dtime):
str=dtime.split(' ')
d=str[0].split('-')
t=str[1].split(':')
yy=d[0]
mm=d[1]
dd=d[2]
hh=t[0]
m=t[1]
ss=t[2]
return datetime(int(yy),int(mm),int(dd),int(hh),int(m),int(ss))
# -*- coding: cp936 -*-
#扫描日志文件
#log为新的要扫描的日志文件
#temp为上次扫描过程中未匹配完的的数据
import cPickle as p
class File:
def loadLog(self):
try:
f=open('log','r')
strs=f.readlines()
return strs
except:
print '加载文件失败,请查看文件是否存在'
finally:
f.close()
def storeTemp(self,data):
try:
f=open('temp','w')
p.dump(data, f)
f.close()
except:
print '存储未匹配完成的数据失败'
finally:
f.close()
def loadTemp(self):
try:
f=open('temp','r')
data=p.load(f)
return data
except:
print '文件中没有数据'
finally:
f.close()
#f=File()
#print f.loadTempTime()
# -*- coding: cp936 -*-
#过滤数据是否合法
class filterData:
def filterStr(self,strs):
i=0
print '一共扫描到',len(strs) ,'条数据'
for spares in strs:
spare=spares.split(' ')
if len(spare)!=7:
i=i+1
strs.remove(spares)
if i!=0:
print '丢弃了',i ,'条不合格的数据'
return strs
#fd=filterData()
#fd.filterStr()
# -*- coding: cp936 -*-
#报表类
class Report:
def report(self,args):
avg=args[0]
leave=args[1]
values=avg.values()
max=values[0]
min=values[0]
maxkeys=list()
minkeys=list()
#find the max value and min value
for value in values:
if max<value:
max=value
if min>value:
min=value
keys=avg.keys()
print '--------------------------报告----------------------------'
print '---完整事务---'
print '完整的事务有:',len(avg),' 个'
print ' 详情如下:'
for key in keys:
if avg.get(key)==max:
maxkeys.append(key)
if avg.get(key)==min:
minkeys.append(key)
#j=j+1
print ' 事务',key,' 的时间为:',avg.get(key)
print ' 其中,最长时间相同的事务有:',len(maxkeys),'个'
for maxkey in maxkeys:
print ' 事务为',maxkey,' 的时间为:',avg.get(maxkey)
print ' 其中,最短时间相同的事务有:',len(minkeys),'个'
for minkey in minkeys:
print ' 事务为',minkey,' 的时间为:',avg.get(minkey)
print '----------------------------------------------------------'
print '---不完整事务----'
print '不完整的事务有:',len(leave),' 个'
print ' 详情如下:'
keys=leave.keys()
for key in keys:
print ' ',leave.get(key)
print '--------------------------结束-----------------------------'
# -*- coding: cp936 -*-
#测试log类
import unittest
from report import Report
from log import log
class TestLog(unittest.TestCase):
def setUp(self):
self.r=Report()
self.Log=log()
def tearDown(self):
self.r=None
self.Log=None
def testLog(self):
test=self.Log.log()
assert test!=None,'测试通过'
#打印报告
self.r.report(test)
def main(self):
suite = unittest.TestLoader().loadTestsFromTestCase(TestLog)
unittest.TextTestRunner().run(suite)
test=TestLog("testLog")
test.main()
分享到:
相关推荐
3.后来想想把log日志用GBK编码读出来,写到新文件中,用utf-8编码,解决了问题。 以上这篇解决python 读取 log日志的编码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网...
感觉还有更好的方法,是直接利用logging.config.fileConfig(log_config_file)方式读进来之后,通过修改handler方式来进行修改。 复制代码 代码如下:“””project trace system“””import sysimport ConfigParser...
ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑。 配置文件的主要功能就是存储一批变量和变量值,在ini文件中使用[章(Section)]对变量...
日记存储为人类可读的纯文本文件 - 您可以将它们放入 Dropbox 文件夹以进行即时同步,您可以放心,您的日记在 2050 年仍然可以阅读,届时您所有花哨的 iPad 日记应用程序都将被遗忘。 jrnl 还可以与出色的 DayOne ...
原理其实很简单,就是读/var/log/messages文件,找到有关usb的信息就可以了。 #!/usr/bin/env python usbmsg = open(/var/log/messages, r) for line in usbmsg.readlines(): if (usb or USB) in line:
ezdxf是一个Python软件包,用于创建新的DXF文件并读取/修改/写入现有的DXF文件 目标受众是开发人员 至少需要Python 3.7 与操作系统无关 用CPython和pypy3测试 适用于Windows,Linux和macOS的PyPI上的CPython C扩展...
该项目使您可以将文件“ log”或“ txt”转换为包含整个数据集的强大结构。 您可以选择返回泡菜对象,压缩txt文件或hdmf5对象。 您还可以创建折线图,这有助于快速查看数据。d如何开始您需要安装conda环境-> 。 ...
* **日志滚动**:当rename Nginx日志文件,并reload Nginx的时候,需要在*读尽*旧的日志文件之后,从头开始处理新的日志文件 * **并发计算**:解析日志的时候,需要消耗大量的CPU资源,因此使用进程池,降低因复杂...
w+:写读 a+:同a U”表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U “b”表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) rb ...
python标准库(就是python自带的意思,无需安装) 二、configparser模块基本使用 2.1 读取 ini 配置文件 #存在 config.ini 配置文件,内容如下: [DEFAULT] excel_path = ../test_cases/case_data.xlsx log_path...
用于将有效的多样本 VCF 文件转换为 SNPduo 兼容格式的简单 Python 脚本。 描述 基于 Web 的工具能够生成逐州身份图以及制表 IBS 州计数。 但是,它旨在分析 SNP 阵列数据。 包含的脚本代表了一种将多样本 VCF ...
可以通过加密的JSON请求将设备的读数记录到CSV文件和/或远程数据库中。 下面将进一步描述。 另请参见(这是项目的第二部分)-用于将设备数据插入DB和数据表示。 该应用程序记录来自以下设备的数据: 通过Modbus协议...
MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度定制化的存储解决方案。 性能与可扩展性 MySQL通过高效的缓存机制、查询优化器...
题目注释 课题练习,做完后直接把test.log文件提交上来。 题目名称 linux课后作业1 题目关键字 linux课后作业1 题目录入时间 2013-5-6 10:23:32 题目内容 完成课本实验6第一题:菜单驱动程序。 ...
一个基本的仪表板,通过Elasticsearch支持的Flask和Pyxley库显示各种物联网传感器的读数。 正在进行的工作。 启动应用 根据config / config_example.py创建config / config.py 点安装-r requirements.txt 光盘朱诺...
- 读 阅读便笺文件并显示 -l - 链接 获取所有链接并显示 -t -标签 获取所有标签并显示 注释文件示例 23-07-2018.md # Notes: 23-07-2018 > Tags: `python`, `cli`, `pip`, `html` ## Links: - [Link 1](#url1) -...
read_data:readExcel()读excel 实现: 1、配置文件方法封装,配置数据分离 2、单独封装请求类:请求不需区分get or post 接口类型 3、多种读取excel方法封装(单列读取,全部读取,根据用例名称读取) 4、pytest...
第15章 log的要素、git和github、js的一些高级内容 bind apply call、前端CSS框架Bootstrap和Pure 第16章 JS的历史现状和未来、什么是ES6有什么新东西、CSS最基础的套路 第17章 前端工程师 第1章 网址组成、端口、...
加拉比克(RadovanGarabík) (garabik @ kassiopeia.juls.savba.sk) 对于不耐烦的人,请尝试以下命令: grc netstatgrc ping hostnamegrc tail /var/log/sysloggrc ps aux由于充满了不同的日志文件颜色,...
4, 增加日志输出到dhcp.log文件. V1.0.12 1, 增加dhcpv6的续约功能, 通过renew和rebind实现续约, 增加release、decline报文的实现; V1.0.13 1, 解决服务器无法设置ipv6地址的问题. 之前的输入框只允许输入数字和.,...