Python学习之道-烤机测试日志Log分析统计

本文介绍了作者在学习Python过程中,为解决大量日志文件分析的痛点,编写Python脚本进行自动化统计。文章详细记录了环境准备、实践过程,包括初步实现、CSV文件写入、脚本运行以及遍历多个Log文件汇总到Excel。同时,文中还分享了遇到的错误及解决方案,如ValueError语法错误、time.clock弃用警告和GBK编码错误。
摘要由CSDN通过智能技术生成

PS:自己学习Python已经断断续续有1年了,之前没有写博客的习惯,前段日子去图书馆借阅了《程序员的自我修养》,觉得应该养成写博客的习惯,将自己学习的过程记录下来,方便自己也方便大家,记录自己学习历程和思路,后面回顾也方便易上手。最主要的是方面自己查找 哈哈

问题引出

工作中经常需要检查样机老化烤机、可靠性环境温湿试验等诸多烤机的日志文件,并统计Log文件中的结果汇总成测试报告的数据。
痛点:
一次烤机的台数往往少则几台多则几十台,人工检查Log文件工作量大、繁索
解决思路:
通过编写Python脚本来实现对Log文件的每一行遍历分析统计,加上一些前后判断逻辑,最终输出需要的有用信息至表格文件

一、环境准备

参照网上的教程,消化吸收。

参考文档:
Python中 sys.argv[]的用法简明解释 - 覆手为云p - 博客园
笔记:
sys.argv[]说白了就是一个从程序外部获取参数的桥梁,这个“外部”很关键。
因为我们从外部取得的参数可以是多个,所以获得的是一个列表(list),也就是说sys.argv其实可以看作是一个列表,所以才能用[]提取其中的元素。其第一个元素是程序本身,随后才依次是外部给予的参数。
里边的项为用户输入的参数,关键就是要明白这参数是从程序外部输入的,而非代码本身的什么地方,要想看到它的效果就应该将程序保存了,从外部来运行程序并给出参数。

Python split()方法 | 菜鸟教程
笔记:
Python split() 通过指定分隔符对字符串进行切片,如果参数 num 有指定值,则分隔 num+1 个子字符串
Python 文件I/O | 菜鸟教程

二、实践代码

读取文件->遍历每行->剔除无关行->判断启动标志行->回溯上次掉电最后一行->对行切片Get数值->对数据判断记录

1、初步实现

@2019/04/08
晚上加班编写,实现分析Log并将结果打印

# -*- coding: UTF-8 -*-

import sys,time

class DisplayFormat(object):
 
    def format_size(self,size):
        '''格式化大小SIZE'''
        KB = 1024                   # KB -> B  1024
        MB = 1048576                # MB -> B  1024 * 1024
        GB = 1073741824             # GB -> B  1024 * 1024 * 1024
        TB = 1099511627776          # TB -> B  1024 * 1024 * 1024
 
        if size >= TB:
            size = str(size >> 40) + 'T'
        elif size < KB:
            size = str(size) + 'B'
        elif size >= GB and size < TB:
            size = str(size >> 30) + 'G'
        elif size >= MB and size < GB:
            size = str(size >> 20) + 'M'
        else:
            size = str(size >> 10) + 'K'
 
        return size
 
    formatstring = '%-18s %-10s %-12s %8s %10s %10s %10s %10s %10s %10s %10s'
 
    def echo_line(self):
        '''输出头部横线'''
        print (self.formatstring % ('-'*15,'-'*10,'-'*12,'-'*12,'-'*10,'-'*10,'-'*10,'-'*10,'-'*10,'-'*10,'-'*10,))
 
    def echo_head(self):
        '''输出头部信息'''
        print (self.formatstring % ('IP','Traffic','Time','Time%',200,404,403,503,500,302,304))
 
    def echo_error(self):
        '''输出错误信息'''
        print ('使用: ' + sys.argv[0] + ' filepath [number]')
 
    def echo_time(self):
        '''输出脚本执行时间'''
        print ('The script is running %s second' % time.process_time())


class AnalysisFile(object):
    '''文件分析处理类'''
    def __init__(self):
        '''初始化一个空字典'''
        self.empty = {}
 
    def split_line_todict(self,line):
        '''传入文件的每一行取出0、8、9字段 生成字典 并返回这个字典'''
        line_split = line.split('] ',2)		##用split讲该行的单词分割成列表,每个单词就时一个列表项目,split的默认参数是空格,所以不传递任何参数时分割空格,在英文中也就等同于分割单词
        line_date = line_split[0].replace('[','')		#去除中间字符,可以使用replace()函数
        if 'Welcome to GkL
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值