人生苦短,我用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)])) # ****** # ****** # ****** # * ...
随机推荐
- Python中级 —— 06SMTP发送电子邮件
Email的历史比Web还要久远,直到现在,Email也是互联网上应用非常广泛的服务.(未完)
- 20190313-时间和日期-Time
概述 在Python中,与时间处理相关的模块有:time.datetime以及calendar,Python中通常有这几种方式表示时间:时间戳.格式化的时间字符串.时间元组(struct_time 共 ...
- 使用kubeadm安装kubernetes/部署前准备/flannel网络插件/镜像下载/
本文内容参考<kuberneters进阶实战>/马哥的新书/推荐 部署前的准备 主机名称解析 分布式系统环境中的多主机通信通常基于主机名称进行,这在IP地址存在变化的可能性时为主机提供了固 ...
- 海面波浪模拟 MATLAB
数学建模美赛集训的时候要用到一个海面模拟,分享一下海面模拟的MATLAB代码 先贴一下结果图: 下面是源代码~~~ function waterwave n = 64; % grid size g = ...
- 20155226-虚拟机与Linux之初体验
虚拟机与Linux之初体验 虚拟机的安装 虚拟机对我来说不是很了解,但今天在安装过程中加深了我的理解.虚拟机是一个在原来系统基础上进行的又一个系统安装,可以在不影响前者的情况下完成一些其不能解决的问题 ...
- 20155235 《Java程序设计》 实验一 Java开发环境的熟悉(Linux + Eclipse)
20155235 <Java程序设计> 实验一 Java开发环境的熟悉(Linux + Eclipse) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用Eclipse 编 ...
- 20155316 实验二《Java面向对象程序设计》实验报告
实验1 实验内容 参考 博客 完成单元测试的学习 提交最后三个JUnit测试用例(正常情况,错误情况,边界情况)都通过的截图,截图上要有画图加水印,输入自己的学号 本提交点考查JUnit会不会使用,测 ...
- 17、JAVA多线程和并发基础面试问答
JAVA多线程和并发基础面试问答 原文链接:http://ifeve.com/java-multi-threading-concurrency-interview-questions-with-ans ...
- Linux安装gitlab
一.GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务.安装方法是参考GitLab在GitHub上的Wiki页面. 二.我相信使用过git的开 ...
- 收集的PHP工具及类库
composer PHP的依赖管理工具 phpmig PHP的数据库迁移工具,依赖于composer Requests for PHP HTTP请求库,采集页面可以用到的 ...