zoukankan      html  css  js  c++  java
  • python处理日志文件

    python处理日志文件

    1 打开日志文件

    虽然,日志文件的后缀为.log,但是基本上与文本文件没有区别,按照一般读取文本文件的方式打开即可:

    fp =open("e:\data.log")
    fp.close()

    应用示例:

     View Code

    参考链接[1].

    2 提取目标信息

    日志文件每行字符串由空格分隔,例如对第1个字段(IP、时间等)感兴趣,则使用split()方法对每行字符串进行切片,将第1个子字符串存到列表里,用于下一步处理。

    示例代码:

    复制代码
    #!/usr/bin/python
    # -*- coding: UTF-8 -*-
     
    txt = "Google#Runoob#Taobao#Facebook"
     
    # 第二个参数为 1,返回两个参数列表
    x = txt.split("#", 1)
     
    print x
    复制代码

    输出结果:

    ['Google', 'Runoob#Taobao#Facebook']

    参考链接[2].

    3 统计分析

    在上一步骤中,将感兴趣的目标信息存储到列表中,现使用python统计列表元素出现的次数,参考链接[3]提供了很多实现方法[4],本文使用collections[5]中的most_common()方法。

    示例:

    from collections import Counter
    def counter(arr):
        return Counter(arr).most_common(2) # 返回出现频率最高的两个数
    
    # 结果:[(2, 3), (1, 2)]

    参考链接[3-4-5]

    4 后记

    完整代码(待整理):

    复制代码
    # -*- coding: utf-8 -*-
    """
    Created on Thu Apr 11 08:24:02 2019
    
    @author: Green
    """
    #import sys
    #import time
    from collections import Counter
    #import pyExcel
    import xlwt
    fp =open("d:\aa.log")
    #print len(fp.readlines()) # 3593512
    mycount = 0
    IPlists = []
    for line in fp.readlines():
        # control times====================
        #mycount += 1
        #if mycount > 100:
        #    break
        #==================================
    
        data = line.split(" ") # 依空格切片
        IP = data[0]
        IPlists.append(IP)
    
    fp.close()
    
    print 'Length of IPlists:', len(IPlists)
    
    #IPlists.count()
    IP_CountResult = Counter(IPlists).most_common()
    #print IP_CountResult
    #print '[0][0]', IP_CountResult[0][0]
    print 'Length of IP_CountResult:', len(IP_CountResult)
    
    f = xlwt.Workbook() # Create workbook
    sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) # Create sheet
    row0 = [u'IP', u'Count']
    # Create first row
    for i in range(0,len(row0)):
        sheet1.write(0, i, row0[i])
    for i in range(0,len(IP_CountResult)):
        for j in range(0,len(IP_CountResult[i])):
            sheet1.write(i+1, j, IP_CountResult[i][j])
    f.save('d:\IP_CountResult.xls') # Save the file
    
    
    #=====================================
    # 测试字符串切片(分割)
    # txt = "Google Runoob Taobao Facebook"
    # 第二个参数为 1,返回两个参数列表
    # x = txt.split(" ", 1)
    # print x[0]
    #=====================================
    
        #filename = line[:14]
        #content = line[14:]
        #with open("e:\"+filename+".txt","w") as fp2:
        #    fp2.write(content+"
    ")
    复制代码

    其他拓展应用,见链接[6-9]

    另,研究pandas在数据处理、绘图等方面的应用。

  • 相关阅读:
    任务墙(6月3日)
    燃尽图(6月3日)
    6.1-6.2小结
    5月28日任务进展
    个人感悟
    代码评审
    如何用ZBrush确定头部五官的位置
    ZBrush中的纹理-水手该怎样进行绘制
    怎样对ZBrush中的材料进行渲染和着色
    快速熟悉Zbrush中的四种裁切笔刷
  • 原文地址:https://www.cnblogs.com/phoenix-mountain/p/12906654.html
Copyright © 2011-2022 走看看