(1)、读文件到缓冲区
def process_file(dst): #读文件到缓冲区 try: #打开文件 txt = open(dst,‘r‘) #dst为文本目录路径 except IOError as s: print(s) return None try: #读文件到缓冲区 bvffer = txt.read() except: print("Read File Error!!") return None txt.close() return bvffer
(2)、处理缓冲区代码,统计每个单词的频率,存放在字典中
def process_buffer(bvffer): if bvffer: word_freq = {} #下面添加处理缓冲区bvffer代码,统计每个单词的频率,存放在word_freq bvffer = bvffer.lower() for ch in ‘“‘!;,.?”‘: # 除去文本中的中英文标点符号 bvffer = bvffer.replace(ch, " ") words = bvffer.strip().split() for word in words: word_freq[word] = word_freq.get(word, 0) + 1 return word_freq
(3)、设置输出函数,输入词频数量排序结果
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("词:%-5s 频:%-4d " % (item[0], item[1]))
(4)、主函数
def main(): dst =‘F:/软件工程/word_freq/Gone_with_the_wind.txt‘ # 《飘》文件的路径 bvffer = process_file(dst) word_freq = process_buffer(bvffer) output_result(word_freq)
(1)缩进
Python语言对代码之间的缩进表达代码之间的包括与层次关系,要求严格明确 ,格式为四个空格。
习惯C语言的人容易在这点上犯错,会出现语法错误:
(1)、执行次数最多
结果表明代码 word_freq[word] = word_freq.get(word, 0) + 1 执行次数最多
(2)、执行时间最长
(3)、查看三个函数分别调用了哪些函数
注:ncalls:表示函数调用的次数;
tottime:表示指定函数的总的运行时间,除掉函数中调用子函数的运行时间;
percall:(第一个percall)等于 tottime/ncalls;
cumtime:表示该函数及其所有子函数的调用运行的时间,即函数开始调用到返回的时间;
percall:(第二个percall)即函数运行一次的平均时间,等于 cumtime/ncalls;
filename:lineno(function):每个函数调用的具体信息;
(4)、可视化操作
下载gprof2dot.py
执行下述步骤:
1. 进行性能分析;分析结果保存到 result 文件,cProfile.run("main()", "result");
2. 转换为图形; 将 result文件 转换为 png 图形格式。 命令:python gprof2dot.py -f pstats result | dot -Tpng -o result.png
转换得到图形如下:
原文:https://www.cnblogs.com/NANA2018/p/9751166.html