• python -- 题目不看别人的自己写然后比较


    题目一

    '''
    编写Python脚本,分析xx.log文件,按域名统计访问次数倒序输出
    
    xx.log文件内容如下:
    https://www.sogo.com/ale.html
    https://www.qq.com/3asd.html
    https://www.sogo.com/teoans.html
    https://www.bilibili.com/2
    https://www.sogo.com/asd_sa.html
    https://y.qq.com/
    https://www.bilibili.com/1
    https://dig.chouti.com/
    https://www.bilibili.com/imd.html
    https://www.bilibili.com/
    
    输出:
    www.bilibili.com
    www.sogo.com
    www.qq.com
    y.qq.com
    dig.chouti.com
    
    '''
    import re
    
    domain_dict = {}
    with open('./visit.log','r') as fr:
        for line in fr.readlines():
            pattern = re.compile(r'(http.*?com).*')
            domain = pattern.match(line).group(1)
            if domain in domain_dict:
                domain_dict[domain] = domain_dict[domain]+1
            else:
                domain_dict[domain] = 1
    print(domain_dict)
    sorted(domain_dict.items(),key=lambda domain_dict:domain_dict[1],reverse=True)
    

    改进版,优化内存

    import re
    def buffered_read(file_opened,block_size=4096):
        while True:
            data = file_opened.read(block_size)
            if not data:
                break
            yield data
            
    domain_dict = {}        
    with open('./visit.log') as f:
        for block in buffered_read(f):
            pattern = re.compile(r'https:.*?com')
            domain_list = pattern.findall(block)
            #domain_dict = [{domain:1} for domain in domain_list]
            for key in domain_list:
                if key in domain_dict:
                    domain_dict[key] = domain_dict[key]+1
                else:
                    domain_dict[key] = 1
                    
    sorted(domain_dict.items(),key=lambda d:d[1],reverse=True)
    
    # 别人家的方法
    #第一种方式
    import re
    from collections import Counter
    with open("xx.log","r",encoding="utf-8") as f:
        data=f.read()
        res=re.findall(r"https://(.*?)/.*?",data)
        dic=Counter(res)
          
    ret=sorted(dic.items(),key=lambda x:x[1],reverse=True)
    
    for k,v in ret:
        print(v,k)
    
    #第二种方式
    dic={}
    with open("xx.log","r",encoding="utf-8") as f:
        for line in f:
            line=line.split("/")[2]
            if line not in dic:
                dic[line]=1
            else:
                dic[line]+=1
    ret=sorted(dic.items(),key=lambda x:x[1],reverse=True)
    for k,v in ret:
        print( v,k)
    
    
    如果有来生,一个人去远行,看不同的风景,感受生命的活力。。。
  • 相关阅读:
    用webview打开网页时,里面有个div带滚动条的,但是在平板上滚动条失效
    PHP获取日期
    iScroll滚动区域中select、input、textarea元素无法点击的Bug修复
    用PHP获取系统时间时,时间比当前时间少8个小时
    kindeditor-4.1.7应用
    PHP连接SQLServer
    PHP常见方法
    APPLICATION ERROR #1502 .
    JSP 简介
    转发和重定向的区别与联系
  • 原文地址:https://www.cnblogs.com/Frank99/p/9328260.html
Copyright © 2020-2023  润新知