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+"\n")
復制代碼

其他拓展應用,見鏈接[6-9]

另,研究pandas在數據處理、繪圖等方面的應用。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM