本文实例讲述了Python找出文件中使用率最高的汉字的方法。分享给大家供大家参考。具体分析如下:
这是我初学Python时写的,为了简便,我并没在排序完后再去掉非中文字符,稍微会影响性能(大约增加了25%的时间)。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
# -*- 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的可读性更高的话,这样也是可以的:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
# -*- 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) |
或者让行数更少(好囧的列表综合):
1
2
3
4
5
6
7
8
9
10
11
12
13
|
# -*- 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者性能几乎一样,结果如下:
1
2
3
4
5
6
7
8
9
10
11
|
的 : 17533 次 是 : 8581 次 不 : 6375 次 我 : 6168 次 了 : 5586 次 一 : 5197 次 这 : 4394 次 在 : 4264 次 有 : 4188 次 人 : 4025 次 一共耗时 : 0.5 秒 |
引入psyco模块的成绩:
1
2
3
4
5
6
7
8
9
10
11
|
的 : 17533 次 是 : 8581 次 不 : 6375 次 我 : 6168 次 了 : 5586 次 一 : 5197 次 这 : 4394 次 在 : 4264 次 有 : 4188 次 人 : 4025 次 一共耗时 : 0.280999898911 秒 |
注:测试文件为778KB的GBK编码,40余万字。
希望本文所述对大家的Python程序设计有所帮助。