python分析accesslog并排序

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

数据是这样的:

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
时间: 2024-10-10 19:41:04

python分析accesslog并排序的相关文章

python分析nginx日志的ip,url,status

Python 脚本如下: #!/usr/bin/env python #_*_coding:utf-8 _*_ __author__ = 'lvnian' #!/usr/bin env python # coding: utf-8 import MySQLdb as mysql import sys, os db = mysql.connect(user="root",passwd="[email protected]",db="intest",

今晚九点|如何使用 Python 分析 web 访问日志?

主题:如何使用 Python 分析 Web 访问日志 内容 Python 基础 字符串.字典.文件.时间 Web 访问日志 实战 提问 主讲师:KK 多语言混搭工程师,热爱开源技术,喜欢GET新技能,5年 PHP.Python 项目开发经验,带领团队完成多个中.小型项目开发,对安全.云等多个领域富有浓厚兴趣,擅长于 WEB 安全开发.性能优化.分布式应用开发&设计等多方面,做事认真负责,乐于分享技能,现任 51Reboot.com Python 实战班讲师 任何语言都有使用场景,只有合适和不合适

分享python分析wave, pcm音频文件

最近研究的,我用的是python3.3, 用matplotlib画图, 下面代码演示分析pcm文件,如果是wave文件,把wave的文件头去掉就是pcm文件了. 代码如下 1 # -*- coding:utf-8 -*- 2 3 import array 4 import os 5 from matplotlib import pyplot 6 7 fileName = 'e:/music/qianqian.pcm' # 2 channel, 16 bit per sample 8 file =

Python list列表的排序

当我们从数据库中获取一写数据后,一般对于列表的排序是经常会遇到的问题,今天总结一下python对于列表list排序的常用方法: 第一种:内建函数sort() 这个应该是我们使用最多的也是最简单的排序函数了,可以直接对列表进行排序 用法: list.sort(func=None, key=None, reverse=False(or True)) 对于reverse这个bool类型参数,当reverse=False时:为正向排序:当reverse=True时:为方向排序.当然默认为False. 执

python分析apahce网站日志的例子

有关python实现apahce网站日志分析的方法. 应用到:shell与python数据交互.数据抓取,编码转换 #coding:utf-8 #!/usr/bin/python'''程序说明:apache access.log日志分析 分析访问网站IP 来源情况 日期:2014-01-06 17:01 author:gyh9711 程序说明:应用到:shell与python数据交互.数据抓取,编码转换'''import osimport jsonimport httplibimport cod

python实现分治法排序

# -*- coding: utf-8 -*- """ Created on Wed May 14 16:14:50 2014 @author: lifeix """ def merge(a, start, mid, end): if start == end: return a if mid == 0: return a temp1 = a[start:mid] m1 = len(temp1)/2 print temp1,'----',m1 n

Python 分析Twitter用户喜爱的推文

CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-5 @author: guaguastd @name: analyze_favorite_tweet.py ''' if __name__ == '__main__': # import json #import json # import search from search import search_for_tweet # import get_fri

Python基于比较的排序

排序是算法学习中最基本的问题. 1.平均时间复杂度均为O(N2)的排序 1.1 插入排序 插入排序对少量元素的排序非常有效.工作机制就像打牌一样,为了将牌插入到已排好序的牌中,需要将牌与手中的牌从右向左进行比较. def insertionSort(alist): n=len(alist) for i in xrange(1,n): key=alist[i] j=i-1 while j>=0 and alist[j]>=key: alist[j+1]=alist[j] j-=1 alist[j

python中的各种排序

#encoding=utf-8 import random from copy import copy def directInsertSort(seq): """ 直接插入排序 """ size = len(seq) for i in range(1,size): tmp, j = seq[i], i while j > 0 and tmp < seq[j-1]: seq[j], j = seq[j-1], j-1 seq[j] =