小豆浆 python2从日志中提取IP地址 带正则用法(collections re sys等模块) www.xdoujiang.com

  • A+
所属分类:python实战
  1. #!/usr/bin/python
  2. # -*- coding: utf-8 -*-
  3. #--------------------------------------------------
  4. #Author:gongzheng
  5. #Email:85646830@163.com
  6. #FileName:2.py
  7. #Function: 
  8. #Version:1.0 
  9. #Created:2017-09-01
  10. #--------------------------------------------------
  11. #python2
  12. import collections
  13. import re
  14. import sys
  15. #re.compile 预先编译好正则表达式,可为之后的重复使用节省时间
  16. Ip = re.compile(r'(\d+\.\d+\.\d+\.\d+)')
  17. Iplist = []
  18. Logfile = "/var/log/nginx/access.log-20170901"
  19. def Fetchip(Logfile):
  20.     with open(Logfile) as f:
  21.         for i in f:
  22.         #re.search会扫描整个字符串,直到找到第一个匹配结果返回 \d表示取的全部是数字 其实就是取111.111.111.111
  23.             j = Ip.search(i)
  24.             if j:
  25.                 #print m.group()
  26.         #针对,执行正则匹配,然后通过group()来取得匹配结果
  27.                 #append()追加用法
  28.                 Iplist.append(j.group())
  29. def Sortip():
  30.     #collections模块基本介绍
  31.     #collections模块在这些内置数据类型的基础上,提供了几个额外的数据类型:
  32.     #1.namedtuple(): 生成可以使用名字来访问元素内容的tuple子类
  33.     #2.deque: 双端队列,可以快速的从另外一侧追加和推出对象
  34.     #3.Counter: 计数器,主要用来计数
  35.     #4.OrderedDict: 有序字典
  36.     #5.defaultdict: 带有默认值的字典
  37.     Td = collections.Counter(Iplist)
  38.     #print Td
  39.     #sorted(iterable,cmp=None,key=None,reverse=False) --> new sorted list
  40.     #iterable:是可迭代类型
  41.     #cmp:用于比较的函数,比较什么由key决定,有默认值,迭代集合中的一项
  42.     #key:用列表元素的某个属性和函数进行作为关键字,有默认值,迭代集合中的一项
  43.     #reverse:排序规则. reverse = True 或者 reverse = False,有默认值
  44.     #返回值:是一个经过排序的可迭代类型,与iterable一样
  45.     #注;一般来说,cmp和key可以使用lambda表达式。
  46.     #sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表
  47.     #items()将字典转成列表
  48.     #我们需要用到参数key,也就是关键词,看下面这句命令,lambda是一个隐函数,是固定写法,
  49.     #不要写成别的单词;a_tuple表示列表中的一个元素,在这里,表示一个元组,a只是临时起的一个名字
  50.     #你可以使用任意的名字;a[0]表示元组里的第一个元素,当然第二个元素就是a_tuple[1]
  51.     #所以这句命令的意思就是按照列表中元组里的第二个元素进行排序。
  52.     Newtd = sorted(Td.iteritems(),key=lambda a:a[1],reverse=True)
  53.     #lambda表达式 可以代替简单函数 创建形式参数a 函数内容a+1 a[1] 二种都可以的 
  54.     for i in Newtd:
  55.     #print i
  56.         print i[1],"\t",i[0]
  57. if __name__=='__main__':
  58.     Fetchip(Logfile)
  59.     Sortip()
  60.  小豆浆 python2从日志中提取IP地址 带正则用法(collections re sys等模块) www.xdoujiang.com
  • 我的微信
  • 这是我的微信扫一扫
  • weinxin
  • 我的微信公众号
  • 我的微信公众号扫一扫
  • weinxin

说点什么

您将是第一位评论人!

提醒
avatar