一、编译环境
python3.7
pycharm2018
二、程序分析
1、读文件到缓冲区process_file(dst)def process_file(dst): # 读文件到缓冲区
try: # 打开文件
f = open(dst,'r' ) # dst为文本的目录路径
except IOError as s:
print(s)
return None
try: # 读文件到缓冲区
bvffer = f.read()
except:
print('Read File Error!')
return None
f.close()
return bvffer
2、统计缓冲区的里每个单词的频率,放入 process_buffer(bvffer)
def process_buffer(bvffer):
if bvffer:
word_freq = {}
# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
Char={",.;!?"}
for ch in Char:
bvffer=bvffer.replace(ch, ' ')
#过滤英文标点特殊符号,以空格代替
Word=bvffer.lower()
Word = bvffer.split()
#以空格来划分字符串
for word in Word:
if word in word_freq.keys():#若没有就置为1,有的话加1
word_freq[word] = word_freq[word] + 1
else:
word_freq[word] = 1
return word_freq
3、按照单词的频数排序,输出次数排名前十的单词(output_result(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)
4、主函数输出文章中单词前十的结果
def main():
dst = "C:\\Users\\YCH19981203\\Gone_with_the_wind.txt"
bvffer = process_file(dst)
word_freq = process_buffer(bvffer)
output_result(word_freq)
5、性能分析部分
if __name__ == "__main__":
import cProfile
import pstats
cProfile.run("main()" , filename="result.out")
p = pstats.Stats('result.out') # 创建Stats对象
p.sort_stats('calls').print_stats(10) # 按照调用次数排序,打印前10函数的信息
p.strip_dirs().sort_stats("cumulative", "name").print_stats(10) # 按照运行时间和函数名排序,只打印前10行函数的信息
p.print_callees("process_buffer") # 查看process_buffer()函数中调用了哪些函数
三、代码风格
缩进很严格
try: # 读文件到缓冲区
bvffer = f.read()
except:
print('Read File Error!')
return None
没有;符号:
try: # 读文件到缓冲区
bvffer = f.read()
except:
print('Read File Error!')
return None
四、程运行结果截图
《Gone_with_the_wind》
五、性能分析及结果改进
执行次数最多的代码
按照函数名,时间最多进行排序
查看调用的函数
改进:
可以选择减少调用次数,这部分调用最多,但是需要遍历整篇文章,不好动。
for word in Word:
if word in word_freq.keys():
word_freq[word] = word_freq[word] + 1
else:
word_freq[word] = 1
return word_freq
那就需要减少运行时间,第一个图发现process_buffer函数用时最多;查看一下发现split分割字符串用时最长,还是不好动;
将代码low函数与split函数同时用,不再分开。发现减少了一丢丢时间