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在数据处理、绘图等方面的应用。

  • 相关阅读:
    Swing 顶层容器
    创建第一个界面程序
    SWING
    通俗解释高中生能听懂的SVM本质和原理
    [初学者入门]任何机器学习套路?逻辑回归是什么?要有哪些未知参数待求解?如何优化?梯度下降是什么?如何用梯度下降
    贝叶斯公式在机器学习中有什么用,实例讲解Python实现朴素贝叶斯分类器
    通俗易懂适合初学者的机器学习实战(1):k- Nearest Neighbor (k个最近的邻居)KNN算法
    Python从0开始实现Numpy矩阵库,拒绝掉包侠,学习造轮子
    99%的人都会忽略的Python易错点总结
    遇到问题,有哪些有效的分析方法?
  • 原文地址:https://www.cnblogs.com/phoenix-mountain/p/12906654.html
Copyright © 2011-2022 走看看