比较python模块re的编译成对象的时间的比较

获取一个网站的uv两种方法:
1.正常的使用re的正则表达式

import re
import time #时间模块
start_time = time.time()
ip_re = r"(^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})" #匹配IP地址的正则表达式
file = r"F:\text\save\logs\access_log" #所需要的网站的日志
result = [] #用来存储所有的ip地址
data = [] # 用来存储去重之后的IP地址
with open(file,mode="r")as fobj:
    for i in fobj:
        result.append(re.findall(ip_re,i))
    for i in result:
        if i not in data:
            data.append(i)
    for i in data:
        print("ip: %s ------> 次数:%s" %(str(i),result.count(i)))
stop_time = time.time()

print("运行时间:%0.5f"%(stop_time - start_time))

运行结果:
在这里插入图片描述
2.将正则表达式编译为对象

import re
import time
start=time.time()
file = r"F:\text\save\logs\access_log"
ip_list=[] #用来存储所有的IP地址
ip_count={} #用来存储IP地址和次数的对应关系的字典
ip_re = r"(^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})"
ip_re_obj=re.compile(ip_re) #将正则表达式编译为对象
with open(file,mode="r")as fobj:
    for i in fobj:
        result = ip_re_obj.search(i) #调用对象的search方法
        if result: 
            client_ip = result.group()
            ip_list.append(client_ip)
for i in ip_list:  #遍历列表
    if i in ip_count.keys(): 
        ip_count[i] += 1
    else:
        ip_count[i] = 1
for i,j in ip_count.items(): #遍历字典
    print("ip: %s ----> 次数:%s" %(i,j))
stop=time.time()
print("运行时间:%0.5f"%(stop - start))

运行结果:
在这里插入图片描述
由此可见两个不同的方法的运行时间的差别,访问的日志越大,两个的区别越大。当日志比较大时,推荐用第二种方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值