Python找出文件中使用率最高的汉字实例详解


Posted in Python onJune 03, 2015

本文实例讲述了Python找出文件中使用率最高的汉字的方法。分享给大家供大家参考。具体分析如下:

这是我初学Python时写的,为了简便,我并没在排序完后再去掉非中文字符,稍微会影响性能(大约增加了25%的时间)。

# -*- coding: gbk -*- 
import codecs 
from time import time 
from operator import itemgetter 
def top_words(filename, size=10, encoding='gbk'): 
  count = {} 
  for line in codecs.open(filename, 'r', encoding): 
    for word in line: 
      if u'\u4E00' <= word <= u'\u9FA5' or u'\uF900' <= word <= u'\uFA2D': 
        count[word] = 1 + count.get(word, 0) 
  top_words = sorted(count.iteritems(), key=itemgetter(1), reverse=True)[:size] 
  print '\n'.join([u'%s : %s次' % (word, times) for word, times in top_words]) 
begin = time() 
top_words('空之境界.txt') 
print '一共耗时 : %s秒' % (time()-begin)

如果想用上新方法,以及让join的可读性更高的话,这样也是可以的:

# -*- coding: gbk -*- 
import codecs 
from time import time 
from operator import itemgetter 
from heapq import nlargest 
def top_words(filename, size=10, encoding='gbk'): 
  count = {} 
  for line in codecs.open(filename, 'r', encoding): 
    for word in line: 
      if u'\u4E00' <= word <= u'\u9FA5' or u'\uF900' <= word <= u'\uFA2D': 
        count[word] = 1 + count.get(word, 0) 
  top_words = nlargest(size, count.iteritems(), key=itemgetter(1)) 
  for word, times in top_words: 
    print u'%s : %s次' % (word, times) 
begin = time() 
top_words('空之境界.txt') 
print '一共耗时 : %s秒' % (time()-begin)

或者让行数更少(好?宓牧斜碜酆希??/p>

# -*- coding: gbk -*- 
import codecs 
from time import time 
from operator import itemgetter 
def top_words(filename, size=10, encoding='gbk'): 
  count = {} 
  for word in [word for word in codecs.open(filename, 'r', encoding).read() if u'\u4E00' <= word <= u'\u9FA5' or u'\uF900' <= word <= u'\uFA2D']: 
    count[word] = 1 + count.get(word, 0) 
  top_words = sorted(count.iteritems(), key=itemgetter(1), reverse=True)[:size] 
  print '\n'.join([u'%s : %s次' % (word, times) for word, times in top_words]) 
begin = time() 
top_words('空之境界.txt') 
print '一共耗时 : %s秒' % (time()-begin)

此外还可以引入with语句,这样只需一行就能获得异常安全性。
3者性能几乎一样,结果如下:

的 : 17533次
是 : 8581次
不 : 6375次
我 : 6168次
了 : 5586次
一 : 5197次
这 : 4394次
在 : 4264次
有 : 4188次
人 : 4025次
一共耗时 : 0.5秒

引入psyco模块的成绩:

的 : 17533次
是 : 8581次
不 : 6375次
我 : 6168次
了 : 5586次
一 : 5197次
这 : 4394次
在 : 4264次
有 : 4188次
人 : 4025次
一共耗时 : 0.280999898911秒

 

注:测试文件为778KB的GBK编码,40余万字。

希望本文所述对大家的Python程序设计有所帮助。

Python 相关文章推荐
基于Python实现通过微信搜索功能查看谁把你删除了
Jan 27 Python
详解python之简单主机批量管理工具
Jan 27 Python
Python列表和元组的定义与使用操作示例
Jul 26 Python
使用Kivy将python程序打包为apk文件
Jul 29 Python
疯狂上涨的Python 开发者应从2.x还是3.x着手?
Nov 16 Python
Python中的探索性数据分析(功能式)
Dec 22 Python
Python类的继承用法示例
Jan 31 Python
详解Python数据分析--Pandas知识点
Mar 23 Python
python 利用pywifi模块实现连接网络破解wifi密码实时监控网络
Sep 16 Python
Python切割图片成九宫格的示例代码
Mar 10 Python
Pycharm安装python库的方法
Nov 24 Python
基于PyTorch中view的用法说明
Mar 03 Python
Python实现Windows上气泡提醒效果的方法
Jun 03 #Python
Python捕捉和模拟鼠标事件的方法
Jun 03 #Python
Python while、for、生成器、列表推导等语句的执行效率测试
Jun 03 #Python
Python fileinput模块使用实例
Jun 03 #Python
以windows service方式运行Python程序的方法
Jun 03 #Python
自己编程中遇到的Python错误和解决方法汇总整理
Jun 03 #Python
python中list常用操作实例详解
Jun 03 #Python
You might like
第十四节 命名空间 [14]
2006/10/09 PHP
centos 5.6 升级php到5.3的方法
2011/05/14 PHP
$_GET['goods_id']+0 的使用详解
2013/06/06 PHP
php强制运行广告的方法
2014/12/01 PHP
PHP中的socket_read和socket_recv区别详解
2015/02/09 PHP
PHP连接Nginx服务器并解析Nginx日志的方法
2015/08/16 PHP
php表单提交实例讲解
2015/11/12 PHP
EasyUI的treegrid组件动态加载数据问题的解决办法
2011/12/11 Javascript
javascript验证身份证号
2015/03/03 Javascript
Javascript控制div属性动态变化实例分析
2015/10/08 Javascript
AngularJS基础 ng-include 指令示例讲解
2016/08/01 Javascript
微信小程序 教程之条件渲染
2016/10/18 Javascript
node.js实现回调的方法示例
2017/03/01 Javascript
基于JavaScript实现数码时钟效果
2020/03/30 Javascript
最基础的vue.js双向绑定操作
2017/08/23 Javascript
详解如何使用webpack打包JS
2018/06/21 Javascript
dts文件中删除一个node或属性的操作方法
2018/08/05 Javascript
javascript 易错知识点实例小结
2020/04/25 Javascript
Python中实现对Timestamp和Datetime及UTC时间之间的转换
2015/04/08 Python
Python中用Spark模块的使用教程
2015/04/13 Python
Python实现LRU算法的2种方法
2015/06/24 Python
Python cookbook(数据结构与算法)通过公共键对字典列表排序算法示例
2018/03/15 Python
Python爬取商家联系电话以及各种数据的方法
2018/11/10 Python
python set集合使用方法解析
2019/11/05 Python
Python实现投影法分割图像示例(二)
2020/01/17 Python
Python collections.defaultdict模块用法详解
2020/06/18 Python
CSS3使用border-radius属性制作圆角
2014/12/22 HTML / CSS
CSS3过渡transition效果实例介绍
2016/05/03 HTML / CSS
Probikekit日本:自行车套件,跑步和铁人三项装备
2017/04/03 全球购物
英语文学专业学生的自我评价
2013/10/31 职场文书
财务会计自荐信范文
2014/02/21 职场文书
党员应该树立反腐倡廉的坚定意识思想汇报
2014/09/12 职场文书
有限责任公司股东合作协议书范本
2014/10/30 职场文书
优秀团队申报材料
2014/12/26 职场文书
SSM VUE Axios详解
2021/10/05 Vue.js
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android