`

python 读log文件

阅读更多
利用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()
分享到:
评论

相关推荐

    解决python 读取 log日志的编码问题

    3.后来想想把log日志用GBK编码读出来,写到新文件中,用utf-8编码,解决了问题。 以上这篇解决python 读取 log日志的编码问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持软件开发网...

    python改变日志(logging)存放位置的示例

    感觉还有更好的方法,是直接利用logging.config.fileConfig(log_config_file)方式读进来之后,通过修改handler方式来进行修改。 复制代码 代码如下:“””project trace system“””import sysimport ConfigParser...

    Python3读写ini配置文件的示例

    ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑。 配置文件的主要功能就是存储一批变量和变量值,在ini文件中使用[章(Section)]对变量...

    一个简单的命令行日志程序,用于将日志存储在纯文本文件中-python

    日记存储为人类可读的纯文本文件 - 您可以将它们放入 Dropbox 文件夹以进行即时同步,您可以放心,您的日记在 2050 年仍然可以阅读,届时您所有花哨的 iPad 日记应用程序都将被遗忘。 jrnl 还可以与出色的 DayOne ...

    在linux下实现 python 监控usb设备信号

    原理其实很简单,就是读/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:DXF的Python接口

    ezdxf是一个Python软件包,用于创建新的DXF文件并读取/修改/写入现有的DXF文件 目标受众是开发人员 至少需要Python 3.7 与操作系统无关 用CPython和pypy3测试 适用于Windows,Linux和macOS的PyPI上的CPython C扩展...

    dataSensor:python中的脚本以从传感器读取数据

    该项目使您可以将文件“ log”或“ txt”转换为包含整个数据集的强大结构。 您可以选择返回泡菜对象,压缩txt文件或hdmf5对象。 您还可以创建折线图,这有助于快速查看数据。d如何开始您需要安装conda环境-&gt; 。 ...

    一个基于Python和Flume的日志收集和解析系统+源代码+文档说明

    * **日志滚动**:当rename Nginx日志文件,并reload Nginx的时候,需要在*读尽*旧的日志文件之后,从头开始处理新的日志文件 * **并发计算**:解析日志的时候,需要消耗大量的CPU资源,因此使用进程池,降低因复杂...

    Python对文件操作知识汇总

    w+:写读 a+:同a U”表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U “b”表示处理二进制文件(如:FTP发送上传ISO镜像文件,linux可忽略,windows处理二进制文件时需标注) rb ...

    Python configparser模块应用过程解析

    python标准库(就是python自带的意思,无需安装) 二、configparser模块基本使用 2.1 读取 ini 配置文件 #存在 config.ini 配置文件,内容如下: [DEFAULT] excel_path = ../test_cases/case_data.xlsx log_path...

    vcf2snpduo:用于将有效的多样本 VCF 文件转换为 SNPduo 兼容格式的简单 Python 脚本

    用于将有效的多样本 VCF 文件转换为 SNPduo 兼容格式的简单 Python 脚本。 描述 基于 Web 的工具能够生成逐州身份图以及制表 IBS 州计数。 但是,它旨在分析​​ SNP 阵列数据。 包含的脚本代表了一种将多样本 VCF ...

    data_logger:记录设备数据。 设备读数被写入CSV文件和服务器上的远程数据库

    可以通过加密的JSON请求将设备的读数记录到CSV文件和/或远程数据库中。 下面将进一步描述。 另请参见(这是项目的第二部分)-用于将设备数据插入DB和数据表示。 该应用程序记录来自以下设备的数据: 通过Modbus协议...

    本项目为SWPU数据库原理及应用大作业《西柚外卖订餐系统》,基于Python+Flask+MySQL开发,轻量简洁.zip

    MyISAM则更侧重于读取密集型操作,提供全文索引支持,适用于读多写少的场景。这种多引擎架构使得MySQL能够适应不同业务需求,提供高度定制化的存储解决方案。 性能与可扩展性 MySQL通过高效的缓存机制、查询优化器...

    20150726-Linux系统及程序设计实验全部代码+4种动态网页语言完成综合性实验+2000字综合性实验报告详细

    题目注释 课题练习,做完后直接把test.log文件提交上来。 题目名称 linux课后作业1 题目关键字 linux课后作业1 题目录入时间 2013-5-6 10:23:32 题目内容 完成课本实验6第一题:菜单驱动程序。 ...

    juno:基于Flask和Pyxley的仪表板,用于IoT传感器读数

    一个基本的仪表板,通过Elasticsearch支持的Flask和Pyxley库显示各种物联网传感器的读数。 正在进行的工作。 启动应用 根据config / config_example.py创建config / config.py 点安装-r requirements.txt 光盘朱诺...

    pynotes:使用降价创建每日笔记日志

    - 读 阅读便笺文件并显示 -l - 链接 获取所有链接并显示 -t -标签 获取所有标签并显示 注释文件示例 23-07-2018.md # Notes: 23-07-2018 &gt; Tags: `python`, `cli`, `pip`, `html` ## Links: - [Link 1](#url1) -...

    接口自动化-Auto_API.rar

    read_data:readExcel()读excel 实现: 1、配置文件方法封装,配置数据分离 2、单独封装请求类:请求不需区分get or post 接口类型 3、多种读取excel方法封装(单列读取,全部读取,根据用例名称读取) 4、pytest...

    知乎大神萧井陌web前端课程

    第15章 log的要素、git和github、js的一些高级内容 bind apply call、前端CSS框架Bootstrap和Pure 第16章 JS的历史现状和未来、什么是ES6有什么新东西、CSS最基础的套路 第17章 前端工程师 第1章 网址组成、端口、...

    grc:通用着色剂

    加拉比克(RadovanGarabík) (garabik @ kassiopeia.juls.savba.sk) 对于不耐烦的人,请尝试以下命令: grc netstatgrc ping hostnamegrc tail /var/log/sysloggrc ps aux由于充满了不同的日志文件颜色,...

    DHCP客户端测试软件(dhcp for xcap)

    4, 增加日志输出到dhcp.log文件. V1.0.12 1, 增加dhcpv6的续约功能, 通过renew和rebind实现续约, 增加release、decline报文的实现; V1.0.13 1, 解决服务器无法设置ipv6地址的问题. 之前的输入框只允许输入数字和.,...

Global site tag (gtag.js) - Google Analytics