1、process_file()
作用:按路径打开相应文件并将文件内容写入缓冲区;
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_buffee()
作用: .split()函数将bvffer切片,处理缓冲区 bvffer代码,统计每个单词的频率;
def process_buffer(bvffer);
if bvffer:
word_freq = {} # 新建一个空字典word_freq
# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
for word in bvffer.split(): # .split()函数将bvffer切片
if word not in word_freq:
word_freq[word] = 0
word_freq[word] += 1
return word_freq
3、output_result()
作用:输出文件中统计次数排名前十的单词及出现次数;
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、main()
作用:调用函数
def main():
dst = "D:/Gone_with_the_wind.txt"
bvffer = process_file(dst)
word_freq = process_buffer(bvffer)
output_result(word_freq)
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()函数中调用的函数
二、代码风格说明
1.采用四个空格作为缩进
2.一行代码不要超多79个字符
3.使用空行分割类,函数,以及大块代码
4.注释独占一行
5.使用文档字符串
6.操作符的两侧,逗号后面都要加空格(但是括号的里侧是不加的)
7.统一的函数和类命名:类名采用驼峰 式,方法和函数的命名方式是小写字符加下划线,总是用self作为方法的第一个参数
三、程序运行命令、运行结果截图
四、性能分析结果及改进
1、寻找执行时间最长:
def process_buffer(bvffer):
if bvffer:
word_freq = {} #新建一个空字典word_freq
# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
for word in bvffer.split(): #.split()函数将bvffer切片
if word not in word_freq:
word_freq[word]=0
word_freq[word]+=1
return word_freq
2、次数最多的部分代码
sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)
3、改进代码
使用process_buffer函数进行改进 而不是使用.lower()将句首的大写字母改为小写