def process_file(dst): # 讀文件到緩衝區 try: # 打開文件 f = open(dst, 'r') except IOError as s: print(s) return None try: # 讀文件到緩衝區 bvffer = f.read() except: print("Read File Error!") return None f.close() return bvffer
process_file函數的做用是,經過傳入dst參數,dst是文件的名稱+後綴名,經過文件打開,讀取,最終返回dst文件的字符串形式bvffer。python
def process_buffer(bvffer): if bvffer: word_freq = {} # 下面添加處理緩衝區 bvffer代碼,統計每一個單詞的頻率,存放在字典word_freq # 全變小寫,解決大小寫單詞不一樣問題 bvffer = bvffer.lower() # 把除了小寫字母和空白字符,的其餘字符,替換成空字符 bvffer = re.sub('[^a-z \s]', '', bvffer) # 把空白字符都換成空格 bvffer = re.sub('\s', ' ', bvffer) # 經過切空格把每一個單詞分開成一個list word_list = bvffer.split(' ') # 經過循環,將單詞做爲key存到word_list字典中,並將value初始值設爲0 for item in word_list: if not item: continue word_freq[item.strip()] = 0 # 經過循環,判斷是否在字典中,若在字典中,value+1 for item in word_list: if not item: continue word_freq[item] = word_freq[item] + 1 return word_freq
process_buffer函數傳入的參數是process_file函數返回的bvffer字符串git
將bvffer字符串進行,小寫,去除除了小寫字母和空白字符的其餘字符,把空白字符換成空格函數
以空格分隔,使用split(),經過循環把單詞和出現次數放到字典word_freq中性能
返回word_freq字典學習
def output_result(word_freq): if word_freq: sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True) for item in sorted_word_freq[:10]: # 輸出 Top 10 的單詞 print(item) if __name__ == "__main__": import argparse parser = argparse.ArgumentParser() parser.add_argument('dst') args = parser.parse_args() dst = args.dst bvffer = process_file(dst) word_freq = process_buffer(bvffer) output_result(word_freq)
output_result函數傳入上面的字典word_freq參數,輸出詞頻前10的單詞spa
python word_freq.py Gone_with_the_wind.txt
3d
python word_freq.py A_Tale_of_Two_Cities.txt
code
### 3.簡單性能分析並改進、提交代碼blog
python -m cProfile word_freq.py Gone_with_the_wind.txt
ip
總共有442597次函數調用,程序總共耗時0.464秒
其中process_buffer佔用了,0.408秒
執行次數最多的是strip函數
去掉strip()函數
改爲一個for循環
for item in word_list: if not item: continue if item in word_freq: word_freq[item] = word_freq[item] + 1 else: word_freq[item] = 1
經過此次的詞頻統計案例,複習了python的文件讀寫,字符串處理等操做。
更加深刻地學習使用了git
熟悉了效能分析的基本流程和方法