概述
问题:
编写count_patt.py脚本,实现一个apche日志分析脚本:
- 统计每个客户端访问apache服务器的次数
- 将统计信息通过字典的方式显示出来
- 分别统计客户端是Firefox和MSIE的访问次数
- 分别使用函数式编程和面向对象编程的方式实现
方案
collections是python内建的一个集合模块,模块中提供了许多有用的集合类,其中counter类 是一个简单的计数器,以字典的键值对形式储存,其中搜索的元素作为键,出现的次数作为值
实现过程:
1.实例化一个计数器
2.实例化正则表达式
3.将文件以对象形式打开
4.通过正则表达式查找文件每一行
5.如果找到结果
6.将结果添加到计数器,通过update方法更新原有数据
7.返回计数器
8.将文件地址和正则表达式作为实参传递给函数
步骤
实现此案例需要按照如下步骤进行。
步骤一:编写脚本
- [root@localhost day08]# vim count_patt.py
- #!/usr/bin/env python3
- import re
- import collections
- #fname 文件地址 patt 正则表达式
- def count_patt(fname,patt):
- counter = collections.Counter()
- cpatt = re.compile(patt)
- with open(fname) as fobj:
- for line in fobj:
- m = cpatt.search(line)
- if m:
- counter.update([m.group()])
- return counter
- if __name__ == "__main__":
- fname = "access_log.txt"
- ip_patt = "^(d+.){3}d+"
- a = count_patt(fname,ip_patt)
- print(a)
- br_patt = "Firefox|MSIE|Chrome"
- b = count_patt(fname,br_patt)
- print(b)
实现此案例还可通过面向对象方式实现:
实现过程:
1.创建类CountPatt
2.定义构造方法 创建正则对象
3.定义类方法
4.创建计数器对象
5.打开文本文件
6.通过正则表达式查找文件每一行
7.如果找到结果
8.将结果添加到计数器,通过update方法更新原有数据
9.返回计数器
10.将文件地址和正则表达式作为实参传递给函数
- [root@localhost day08]# vim count_patt2.py
- #!/usr/bin/env python3
- import re
- import collections
- import re
- import collections
- class CountPatt:
- def __init__(self,patt):
- self.cpatt = re.compile(patt)
- def count_patt(self,fname):
- counter = collections.Counter()
- with open(fname) as fobj:
- for line in fobj:
- m = self.cpatt.search(line)
- if m:
- counter.update([m.group()])
- return counter
- if __name__ == "__main__":
- fname = "access_log.txt"
- ip_patt = "^(d+.){3}d+"
- br_patt = "Firefox|MSIE|Chrome"
- ip = CountPatt(ip_patt)
- print(ip.count_patt(fname))
- br = CountPatt(br_patt)
- print(br.count_patt(fname))
步骤二:测试脚本执行
- [root@localhost root]# python3 count_patt.py
- Counter({‘172.40.0.54’:391,‘172.40.50.116’:244,‘201.1.1.254’:173,‘127.0.0.1’:121,‘201.1.2.254’:119})
- Counter({‘Firefox’:870,‘MSIE’:391,‘Chrome’:24})
- [root@localhost day08]# python3 count_patt2.py
- Counter({‘172.40.0.54’:391,‘172.40.50.116’:244,‘201.1.1.254’:173,‘127.0.0.1’:121,‘201.1.2.254’:119})
- Counter({‘Firefox’:870,‘MSIE’:391,‘Chrome’:24})
最后
以上就是纯情镜子为你收集整理的python脚本分析apache访问日志问题:方案步骤的全部内容,希望文章能够帮你解决python脚本分析apache访问日志问题:方案步骤所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复