最近对正则比较感兴趣,但是grep支持的正则不全,C++的话还要安装库都很麻烦。那天安装Wincvs的时候,我顺便安装了Python和tcl/tk,心想干脆拿它们做点东西吧。
Python的上手果然很快,昨天一个晚上基本上语法就清楚了,今天我开始写这个日志文件的IP统计器。边看资料边写,就这么写好了,代码很短,和在一起还不到100行。我认为主要归功于,List的特殊的循环语句,实在是太简洁了,我喜欢。
判断ip是否合法的正则表达式,我用的是:
[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}
当然这个正则表达式还不够,还需要判断每个数字都不能大于255。所以函数如下:
import re
def isIp(Str):
"""
本函数利用[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}这个正则
表达式来判断ip的格式,然后检查4个数字是否都小于256。
"""
p=re.compile('[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')
m=p.match(Str)
if m:
if len([k for k in Str.split(".") if int(k)<256])==4:>
主界面用了tk,显示了一个窗口,一个打开文件按钮和一个退出按钮,统计结果的输出是直接利用终端来进行的。
运行结果如图所示
程序的大概思路是把文件读入一个list,然后对这个list的所有成员提取记录的客户端IP信息。然后用isIp函数验证,如果合法则加入到iplist里面。然后对iplist的所有成员进行统计,形成一个dictionary,key是ip,value是ip对应的重复次数。
对于今日截止到现在的访问日志,得到的统计结果为:
-------------------
Ip counts is 1183
Log item counts is 6235
One Ip average Pageview is 5
Max pageview is 526 It's Ip is 219.238.144.234
-------------------
这个Max pageview不用问了,肯定是我自己了,我没事儿干的时候就会无聊的点击自己的网站。人品问题,居然点了那么多次,寒死我了!
从今天的编程体验看,Python确实是一种非常好用的语言,只要有手册在手,使用是非常方便的。下午的时候yayv问我是不是有一种basic的感觉,我说,感觉有点像lisp,虽然我没有见过lisp。
鸣谢:
Python中文社区 http://python.cn/(我在那里找到了很多的资料)
Python学习笔记 作者:王纯业(主要是这本书教会我怎么编python程序的。)
源代码下载:
主程序 logtools.py
库文件 loglibs.py



请不要吝惜您的评论,每一条评论,都是我在漫漫长夜前行的力量
1 条评论:
可以看看dive into python,非常清楚的一本书。
12:19 上午
发表评论
<< 主页