2005-10-30

初试Python,我今天写了一个简单的日志文件的IP统计器

最近对正则比较感兴趣,但是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,显示了一个窗口,一个打开文件按钮和一个退出按钮,统计结果的输出是直接利用终端来进行的。

运行结果如图所示

我的Python程序运行结果

程序的大概思路是把文件读入一个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 条评论:

Blogger bookstack 说...

可以看看dive into python,非常清楚的一本书。

12:19 上午

 

发表评论

<< 主页