Python3 写一个简单的文本统计脚本

身为一个半路跑去学Python 的少年,上学期看了不少书,但练习地少,这学期我就多练练,今天就亮一手写个简单(只考虑程序的性能和可拓展性,没有考虑健壮性)的文本统计脚本,欢迎内行的人来指教


#coding=utf-8
''' 
    author:Frank.ZhangLongqi
    Date:2018-3-17
    function:
    对一列表内的元组进行分类,相同的分为一类,并计数,将结果写入字典
    解法:把该列表转化为默认字典(key值相同的value将会合并为list()),
    再对合并后的d.values()进行分别求和,最后将d.keys()和d.values()进行
    dic(zip(list1,list2))合并成字典即可;以下提供了2种形成默认字典的方法
    分别为count_word1和count_word2
'''
#*********************#导入区
import collections
import time
import operator
#*******************************************8#初期化区
d = collections.defaultdict(list)
value_set = {}

#********************************************#函数区
def read_file(filename):
    with open(filename,encoding="utf-8") as f:
        while True:
            c=f.read(1)
            if not c:
                break
            else:
                yield (c,1)#生成器,占内存少

def count_words1(filename):
    global value_set
    for tup in read_file(filename):#调用生成器
        k,v=tup[0],tup[1]
        value_set.setdefault(k,list()).append(v)

    word,counts =value_set.keys(),value_set.values()
    l=[]
    for i in counts:
        l.append(sum(i))
        
    return dict(zip(word, l))    #合并列表为字典

def count_words2(filename):
    global d
    for tup in read_file(filename):
        k,v = tup[0],tup[1]
        d[k].append(v)

    word,counts =d.keys(),d.values()
    l=[]
    for i in counts:
        l.append(sum(i))
        
    return dict(zip(word, l))    #合并列表为字典
#*******************************************#主函数区
if __name__ == '__main__':
    filename = "G:\第5学期\朋友.txt"
    #tup=read_file(filename)
    start=time.clock()
    result1 = count_words1(filename)
    mid=time.clock()
    result2 = count_words2(filename)
    end=time.clock()
    result_tmp=sorted(result1.items(),key=operator.itemgetter(1),reverse=True)#给统计结果排序
    result_1=dict(result_tmp)
    print("results1:{0}\n && internal:{1}".format(result_1,mid-start))
    print("results2:{0}\n && internal:{1}".format(result2,end-mid))

运行结果截图:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值