Python找出文件中使用率最高的汉字实例详解
本文实例讲述了Python找出文件中使用率最高的汉字的方法。分享给大家供大家参考。具体分析如下:
这是我初学Python时写的,为了简便,我并没在排序完后再去掉非中文字符,稍微会影响性能(大约增加了25%的时间)。
#-*-coding:gbk-*- importcodecs fromtimeimporttime fromoperatorimportitemgetter deftop_words(filename,size=10,encoding='gbk'): count={} forlineincodecs.open(filename,'r',encoding): forwordinline: ifu'\u4E00'<=word<=u'\u9FA5'oru'\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)forword,timesintop_words]) begin=time() top_words('空之境界.txt') print'一共耗时:%s秒'%(time()-begin)
如果想用上新方法,以及让join的可读性更高的话,这样也是可以的:
#-*-coding:gbk-*- importcodecs fromtimeimporttime fromoperatorimportitemgetter fromheapqimportnlargest deftop_words(filename,size=10,encoding='gbk'): count={} forlineincodecs.open(filename,'r',encoding): forwordinline: ifu'\u4E00'<=word<=u'\u9FA5'oru'\uF900'<=word<=u'\uFA2D': count[word]=1+count.get(word,0) top_words=nlargest(size,count.iteritems(),key=itemgetter(1)) forword,timesintop_words: printu'%s:%s次'%(word,times) begin=time() top_words('空之境界.txt') print'一共耗时:%s秒'%(time()-begin)
或者让行数更少(好囧的列表综合):
#-*-coding:gbk-*- importcodecs fromtimeimporttime fromoperatorimportitemgetter deftop_words(filename,size=10,encoding='gbk'): count={} forwordin[wordforwordincodecs.open(filename,'r',encoding).read()ifu'\u4E00'<=word<=u'\u9FA5'oru'\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)forword,timesintop_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程序设计有所帮助。