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} && internal:{1}".format(result_1,mid-start)) print("results2:{0} && internal:{1}".format(result2,end-mid))
运行结果截图:
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。