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中字符串的处理技巧分享
Sep 17 Python
Python内置函数OCT详解
Nov 09 Python
Python学习小技巧之列表项的排序
May 20 Python
Python如何生成树形图案
Jan 03 Python
django中的HTML控件及参数传递方法
Mar 20 Python
Python实现压缩文件夹与解压缩zip文件的方法
Sep 01 Python
浅析python的Lambda表达式
Feb 27 Python
Python进阶之使用selenium爬取淘宝商品信息功能示例
Sep 16 Python
Django单元测试中Fixtures的使用方法
Feb 26 Python
python实现读取类别频数数据画水平条形图案例
Apr 24 Python
python 星号(*)的多种用途
Sep 21 Python
Python实现学生管理系统并生成exe可执行文件详解流程
Jan 22 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
十天学会php之第十天
2006/10/09 PHP
PHP 服务器配置(使用Apache及IIS两种方法)
2009/06/01 PHP
PHP中使用GD库创建圆形饼图的例子
2014/11/19 PHP
微信支付开发发货通知实例
2016/07/12 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
javascript编程起步(第二课)
2007/02/27 Javascript
JavaScript 事件的一些重要说明
2009/10/25 Javascript
JavaScript 学习笔记(六)
2009/12/31 Javascript
封装的原生javascript弹出层代码
2010/09/24 Javascript
JS随即打乱数组实现代码
2012/12/03 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
jQuery中after()方法用法实例
2014/12/25 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 简史
2015/01/09 Javascript
js实现一个链接打开两个链接地址的方法
2015/05/12 Javascript
js命名空间写法示例
2015/12/18 Javascript
js实现图片上传预览原理分析
2017/07/13 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
ant design 日期格式化的实现
2020/10/27 Javascript
nodejs处理tcp连接的核心流程
2021/02/26 NodeJs
详解Python爬虫的基本写法
2016/01/08 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
python爬虫 2019中国好声音评论爬取过程解析
2019/08/26 Python
ubuntu上安装python的实例方法
2019/09/30 Python
Python读取Excel数据并生成图表过程解析
2020/06/18 Python
Scrapy中如何向Spider传入参数的方法实现
2020/09/28 Python
丝芙兰巴西官方商城:SEPHORA巴西
2016/10/31 全球购物
试解释COMMIT操作和ROLLBACK操作的语义
2014/07/25 面试题
年终自我鉴定
2013/10/09 职场文书
外贸业务员岗位职责
2013/11/24 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
2014离婚协议书范文两篇
2014/09/15 职场文书
项目负责人岗位职责
2015/02/15 职场文书
2015年乡镇残联工作总结
2015/05/13 职场文书
高中语文教学反思范文
2016/02/16 职场文书
React配置子路由的实现
2021/06/03 Javascript
Oracle 触发器trigger使用案例
2022/02/24 Oracle