码迷,mamicode.com
首页 > 数据库 > 详细

python分析accesslog并排序

时间:2015-08-06 13:37:22      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:python   linux   acceslog   

最近面试的一个问题,面的时候脑子卡壳了,面完刚出公司就想起来,很尴尬。于是记录一下。

数据是这样的:

121.31.95.182 - - [06/Aug/2015:08:04:41 +0800] "GET /user.php?do=GetGiftAward&phpp=ANDROID_91&phpl=ZH_CN&pvc=1.5.3&pvb=2014-10-22%2017%3a17%3a26&v=9099 HTTP/1.1" 200 250 "-" "Dalvik/1.6.0 (Linux; U; Android 4.4.4; HM NOTE 1LTE MIUI/V6.6.1.0.KHICNCF)"

很普通的nginx日志


问题是:

    如果这样的数据有100行怎么找出日志里IP次数出现最多的5个,1W行呢。

思路其实很简单:

    打开一个文件句柄,每次读一行,然后通过split切割出ip,记录到字典中,当时面试的时候卡在排序了,脑子一片糊涂- -。 其实很简单 用sorted函数 以value当成排序的key 排好序后翻转一下,这样出现次数多的就在前面了。然后顺序打印即可                       

#!/usr/bin/env python

data={}
fp=open(‘/tmp/access.log‘,‘rb‘)
while True:
	fdata=fp.readline()
	if not fdata :
		break
	ip = fdata.split()[0]
	if ip in data:
		data[ip]+=1
	else:
		data[ip]=1

#sort
print sorted(data.items(),key=lambda d:d[1],reverse=True)[0:5]


PS:shell版本  cat /tmp/access.log | awk ‘{print $1}‘ | sort | uniq -c| sort -k1nr|head -5

本文出自 “tring” 博客,请务必保留此出处http://warcraft3.blog.51cto.com/6514883/1682150

python分析accesslog并排序

标签:python   linux   acceslog   

原文地址:http://warcraft3.blog.51cto.com/6514883/1682150

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!