一、程序分析

  1、读取文件到缓冲区

     def process_file():     # 读文件到缓冲区
try: # 打开文件
f = open("C:\\Users\\panbo\\Desktop\\A_Tale_of_Two_Cities.txt", "r")
except IOError as e:
print (e)
return None
try: # 读文件到缓冲区
bvffer = f.read()
except:
print ("Read File Error!")
return None
f.close() #关闭文件
return bvffer

  2、缓冲区字符串分割成带有词频的字典

 def process_buffer(bvffer):
if bvffer:
word_freq = {}
# 下面添加处理缓冲区 bvffer代码,统计每个单词的频率,存放在字典word_freq
#文本字符串前期处理
strl_ist = bvffer.replace(punctuation, '').lower().split(' ')
#如果单词在字典里,则字典值加1,不在则添加该单词到字典里
for str in strl_ist:
if str in word_freq.keys():
word_freq[str] = word_freq[str] + 1
else:
word_freq[str] = 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 (item)

  4、主程序输出前十结果和分析结果

 if __name__ == "__main__":
bvffer = process_file()
word_freq = process_buffer(bvffer)
output_result(word_freq)
import cProfile
import pstats;
p=pstats.Stats('word_freq.out');
#输出调用此处排前十的函数
p.sort_stats('calls').print_stats(10)
#输出按照运行时间排名前十的函数
p.strip_dirs().sort_stats("cumulative", "name").print_stats(10)
#p.print_callers(0.5, "sre_parse.py")
#查看每个函数分别调用了哪些函数
p.print_callees("process_file")
p.print_callees("process_buffer")
p.print_callees("output_result")
#查看有哪些函数调用了builtins.print
p.print_callers(0.5, "builtins.print")
p.print_callers(0.5, "builtins.exec")
#p.strip_dirs().sort_stats("name").print_stats(3)
#p.strip_dirs().sort_stats("cumulative", "name").print_stats(0.5)
#p.print_callers(0.5, "built-in")

二、代码风格说明

  1、python3与python2在print函数的使用上有着细微的区别,在python3中print函数要加上(),如上第一段代码的第五行。

  2、使用4个空格进行缩进(即一个tab键),并且缩进符相同的代码属于同一个级别

  3、模块级函数和类定义之间空两行。

    4、类成员函数之间空一行。

    5、不要使用太多的连续空行来区分代码的逻辑块。

三、程序运行结果截图

  本程序,运行命令全都写在程序中,而非通过dos窗口执行。

   1、A_Tale_of_Two_Cities文本词频统计结果

  

  2、Gone_with_the_wind文本词频统计结果

  

四、性能分析及改进

  1、性能分析

  1.1、执行时间最多的部分代码

  

1.2、执行次数最多的部分代码

  

  1.3、找到耗时最多的调用函数为

  

  即为:  sorted_word_freq = sorted(word_freq.items(), key=lambda v: v[1], reverse=True)

  2、尝试改进程序代码?

  

  

人生苦短,我用Python!的更多相关文章

  1. 人生苦短,我用Python(1)

    一.人生苦短,我用Python 在文章的开头给大家介绍一下Python语言,作者Guido von Rossum.对,就是图中的“人生苦短我用Python”那哥们.你可能以为我会用很多文字介绍Pyth ...

  2. 人生苦短之---认识Python

    认识 Python 人生苦短,我用 Python —— Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...

  3. 初学者路径规划 | 人生苦短我用Python

    纵观编程趋势 人生苦短,我用Python,比起C语言.C#.C++和JAVA这些编程语言相对容易很多.Python非常适合用来入门.有人预言,Python会成为继C++和Java之后的第三个主流编程语 ...

  4. 人生苦短我用Python 第三周 函数周

    函数的定义: 1,def 函数名(参数1,参数2......): "注释:函数的作用和参数,增加可读性", 2,函数体 3,返回值 最简单的函数: def func(): prin ...

  5. 人生苦短,我用python(目录)

    一.python基础篇 python中闭包及延时绑定问题 python中的装饰器.生成器 二.前端 bootstrap框架 BOM&DOM JavaScript中的词法分析 三.数据库 mys ...

  6. 人生苦短,我用python

    星空不问赶路人,时光不负有心人,你可以脱变. 1.计算机的初步认识 2.解释器的安装 python2.7(2020年官方不在维护) python3.6 (官方推荐) 1.下载安装包 https://w ...

  7. 深度学习之美(张玉宏)——第四章 人生苦短我用python

    1 函数参数 (1)收集参数:以一个星号*加上形参名的方式,表示这个函数的实参个数不定,可能0个可能n个. def varParaFun(name,*param): print('位置参数是:',na ...

  8. 人生苦短我用Python,本文助你快速入门

    目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...

  9. 人生苦短 我用Python 第二周的第一天 (数据类型)

    数字:  整形  int  长整形(Python3里面把整形.长整形和到一起啦) 浮点型( float) 1.3 5.2 等等  科学技术发表示 1.3e-3=0.0013 e的代表10. bin是二 ...

  10. 一句话打印'*'图案(列表推导式, 人生苦短, 我用Python)

    ```python # coding=utf-8 print ('\n'.join(['*'*6 for i in range(4)])) # ****** # ****** # ****** # * ...

随机推荐

  1. lrzsz Linux服务器Windows互传文件工具

    lrzsz是一款在linux里可代替ftp上传和下载的程序,但只限于较小的文件,如果是目录需要打包成单个文件在实现下载. 条件:需要使用SecureCRT或者Xshell等客户端工具连接Linux 下 ...

  2. 在js中获取页面元素的属性值时,弱类型导致的诡异事件踩坑记录,

    前几天写一个js的时候遇到一个非常诡异的事情,这个问题是这样的,我要获取一个页面的DOM元素的val值,判断这个值是否比某个变量大,这个需求原先数字最大也就是10,现在要改了,可能会更多,这个时候我发 ...

  3. UITextView 光标定位

    在使用UITextView的时候, 如何在光标的位置插入字符 或者 图片? 以下Demo为你解答: 应用背景:键盘自定义emoji表情 #pragma mark - KVO - (void)obser ...

  4. thinkphp5查询表达式IN使用小计

    根据多个id批量更新指定字段值 $map[] = ['id','in', input('post.id/a')]; $result = db('picture')->where($map)-&g ...

  5. spark or sparkstreaming的内存泄露问题?

    关于sparkstreaming的无法正常产生数据---->到崩溃---->到数据读写极为缓慢(或块丢失?)问题 前两阶段请看我的博客:https://www.cnblogs.com/wa ...

  6. 补交 20155202 蓝墨云班课 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能

    蓝墨云班课 编写MyCP.java 要求: 编写MyCP.java 实现类似Linux下cp XXX1 XXX2的功能,要求MyCP支持两个参数: java MyCP -tx XXX1.txt XXX ...

  7. 20155207实验2 Windows口令破解

    20155207实验2 Windows口令破解 实验目的 了解Windows口令破解原理 对信息安全有直观感性认识 能够运用工具实现口令破解 实验原理 口令破解方法 口令破解主要有两种方法:字典破解和 ...

  8. 《Java程序设计》课堂实践内容总结

    <Java程序设计>课堂实践内容总结 实践一 要求 修改教材P98 Score2.java, 让执行结果数组填充是自己的学号: 提交在IDEA或命令行中运行结查截图,加上学号水印,没学号的 ...

  9. 【SDOI2014】数表

    题面 题解 不管$a$的限制 我们要求的东西是:($\sigma(x)$是$x$的约数个数和) $ \sum_{i=1}^n\sum_{j=1}^m\sigma(gcd(i,j)) $ 设$f(x)= ...

  10. 【LG4148】简单题

    [LG4148]简单题 题面 洛谷 题解 \(kdt\)模板题呀... #include <iostream> #include <cstdio> #include <c ...