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))

運行結果截圖:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章