Python3 寫一個簡單的文字統計指令碼
阿新 • • 發佈:2019-01-29
身為一個半路跑去學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))
執行結果截圖: