人生苦短,我用Python!
一、程序分析
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!的更多相关文章
- 人生苦短,我用Python(1)
一.人生苦短,我用Python 在文章的开头给大家介绍一下Python语言,作者Guido von Rossum.对,就是图中的“人生苦短我用Python”那哥们.你可能以为我会用很多文字介绍Pyth ...
- 人生苦短之---认识Python
认识 Python 人生苦短,我用 Python —— Life is short, you need Python 目标 Python 的起源 为什么要用 Python? Python 的特点 Py ...
- 初学者路径规划 | 人生苦短我用Python
纵观编程趋势 人生苦短,我用Python,比起C语言.C#.C++和JAVA这些编程语言相对容易很多.Python非常适合用来入门.有人预言,Python会成为继C++和Java之后的第三个主流编程语 ...
- 人生苦短我用Python 第三周 函数周
函数的定义: 1,def 函数名(参数1,参数2......): "注释:函数的作用和参数,增加可读性", 2,函数体 3,返回值 最简单的函数: def func(): prin ...
- 人生苦短,我用python(目录)
一.python基础篇 python中闭包及延时绑定问题 python中的装饰器.生成器 二.前端 bootstrap框架 BOM&DOM JavaScript中的词法分析 三.数据库 mys ...
- 人生苦短,我用python
星空不问赶路人,时光不负有心人,你可以脱变. 1.计算机的初步认识 2.解释器的安装 python2.7(2020年官方不在维护) python3.6 (官方推荐) 1.下载安装包 https://w ...
- 深度学习之美(张玉宏)——第四章 人生苦短我用python
1 函数参数 (1)收集参数:以一个星号*加上形参名的方式,表示这个函数的实参个数不定,可能0个可能n个. def varParaFun(name,*param): print('位置参数是:',na ...
- 人生苦短我用Python,本文助你快速入门
目录 前言 Python基础 注释 变量 数据类型 浮点型 复数类型 字符串 布尔类型 类型转换 输入与输出 运算符 算术运算符 比较运算符 赋值运算符 逻辑运算符 if.while.for 容器 列 ...
- 人生苦短 我用Python 第二周的第一天 (数据类型)
数字: 整形 int 长整形(Python3里面把整形.长整形和到一起啦) 浮点型( float) 1.3 5.2 等等 科学技术发表示 1.3e-3=0.0013 e的代表10. bin是二 ...
- 一句话打印'*'图案(列表推导式, 人生苦短, 我用Python)
```python # coding=utf-8 print ('\n'.join(['*'*6 for i in range(4)])) # ****** # ****** # ****** # * ...
随机推荐
- 升级Xcode10报错问题修复
Xcode10 问题1 报文件重复 File--> Workspace Settings --> Build System 修改为Legacy Build System (默认是New B ...
- 海面波浪模拟 MATLAB
数学建模美赛集训的时候要用到一个海面模拟,分享一下海面模拟的MATLAB代码 先贴一下结果图: 下面是源代码~~~ function waterwave n = 64; % grid size g = ...
- HyperLedger Fabric 1.4 区块链技术原理(2.2)
区块链从字面上理解:数据记录在区块中,通过一定的算法把区块连成一个链. 区块链通过哈希(Hash)算法,生成一串字符串,保存在区块的头部中,一个的区块通过指向上一个Hash值,加入到区块链 ...
- NetWork——关于HTTP、HTTPS的知识总结
. )根据用户的当前的网络质量来判断下载什么质量的图片. 最后,如果觉得有所收获,请点下面的赞多多支持~谢谢各位
- html模板 练习(仿照抽屉网)
1.页面布局 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...
- 【CF613D】Kingdom and its Cities
[CF613D]Kingdom and its Cities 题面 洛谷 题解 看到关键点当然是建虚树啦. 设\(f[x]\)表示以\(x\)为根的子树的答案,\(g[x]\)表示以\(x\)为根的子 ...
- mysql 创建外键时发生错误的原因和解决方法
可以去网上查看错误号,就能知道到底哪里出错了 https://zhidao.baidu.com/question/359868536.html 这里1452对应的错误是因为建立外键的表中还有数据,所以 ...
- javaweb(三十七)——获得MySQL数据库自动生成的主键
测试脚本如下: 1 create table test1 2 ( 3 id int primary key auto_increment, 4 name varchar(20) 5 ); 测试代码: ...
- 【轮子狂魔】打造简易无配置的IoC
如何指定Business Event和Command之间的关系? 既然是基于惯例优先原则,那么我们首先需要定义一个惯例: 1.调度事件和调度处理器之间是一对多关系(多对多的话,相信你看完了以后应该会知 ...
- python-模块详解
模块: 模块的分类: 第三方模块/扩展模块:没在安装python解释器的时候安装的那些功能 自定义模块:你写的功能如果是一个通用的功能,那你就把它当做一个模块 内置模块:安装python解释器的时候跟 ...