python提取日志内容_python处理日志文件

python处理日志文件

1 打开日志文件

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

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

fp.close()

应用示例:

 View Code

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']

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