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中的特殊语法:filter、map、reduce、lambda介绍
Apr 14 Python
python在指定目录下查找gif文件的方法
May 04 Python
Python 包含汉字的文件读写之每行末尾加上特定字符
Dec 12 Python
Python 获取当前所在目录的方法详解
Aug 02 Python
Python实现的朴素贝叶斯分类器示例
Jan 06 Python
Python编程scoketServer实现多线程同步实例代码
Jan 29 Python
Python3.5文件读与写操作经典实例详解
May 01 Python
python实现用户名密码校验
Mar 18 Python
基于python实现数组格式参数加密计算
Apr 21 Python
Django REST Swagger实现指定api参数
Jul 07 Python
PyTorch安装与基本使用详解
Aug 31 Python
Python实现石头剪刀布游戏
Jan 20 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中处理模拟rewrite 效果
2006/12/09 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
PHP实现随机发放扑克牌
2020/04/21 PHP
基于Jquery的回车成tab焦点切换效果代码(Enter To Tab )
2010/11/14 Javascript
javascript中取前n天日期的两种方法分享
2014/01/26 Javascript
JavaScript中的数值范围介绍
2014/12/29 Javascript
JS+CSS模拟可以无刷新显示内容的留言板实例
2015/03/03 Javascript
深入浅析AngularJS中的module(模块)
2016/01/04 Javascript
给easyui datebox扩展一个清空的实例
2016/11/09 Javascript
详解windows下vue-cli及webpack 构建网站(三)使用组件
2017/06/17 Javascript
Windows下使用Nodejs运行js的方法
2017/09/02 NodeJs
Vue.js 利用v-for中的index值实现隔行变色
2018/08/01 Javascript
Vue项目安装插件并保存
2019/01/28 Javascript
基于layui内置模块(element常用元素的操作)
2019/09/20 Javascript
vue.js路由mode配置之去掉url上默认的#方法
2019/11/01 Javascript
JS实现滑动导航效果
2020/01/14 Javascript
JS求解两数之和算法详解
2020/04/28 Javascript
基于vue和bootstrap实现简单留言板功能
2020/05/30 Javascript
uniapp实现可滑动选项卡
2020/10/21 Javascript
js实现验证码干扰(静态)
2021/02/22 Javascript
[28:28]Ti4 冒泡赛第二天NEWBEE vs NaVi 2
2014/07/15 DOTA
[00:42]《辉夜杯》—职业组预选赛12月3日15点 正式打响
2015/12/03 DOTA
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
详解Python中dict与set的使用
2015/08/10 Python
python 搭建简单的http server,可直接post文件的实例
2019/01/03 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python内置方法实现字符串的秘钥加解密(推荐)
2019/12/09 Python
用什么库写 Python 命令行程序(示例代码详解)
2020/02/20 Python
详解基于Facecognition+Opencv快速搭建人脸识别及跟踪应用
2021/01/21 Python
CSS3为背景图设置遮罩并解决遮罩样式继承问题
2020/06/22 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
中学生个人自我评价
2014/02/06 职场文书
机械制造毕业生求职信
2014/03/03 职场文书
如何写一份成功的商业计划书
2019/06/25 职场文书
前端监听websocket消息并实时弹出(实例代码)
2021/11/27 Javascript
python内置模块之上下文管理contextlib
2022/06/14 Python