设有一个文本文件word.txt,里面存放的是用空格或者换行分开的英文单词,统计其中每个词出现的频率,将统计结果保存在某个文件中。
这里利用列表推导式和集合来统计词频。
代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
filename = 'C:\\Users\\dell\\desktop\\big.txt' with open(filename) as f: s = f.readlines() words = [] for line in s: words.extend(line.strip().split(' ')) # 中英文混合对齐 ,参考http://bbs.fishc.com/thread-67465-1-1.html ,二楼 # 汉字与字母 格式化占位 format对齐出错 对不齐 汉字对齐数字 汉字对齐字母 中文对齐英文 # alignment函数用于英汉混合对齐、汉字英文对齐、汉英对齐、中英对齐 def alignment(str1, space=8, align='left'): length = len(str1.encode('gb2312')) space = space - length if space >= length else 0 if align in ['left', 'l', 'L', 'Left', 'LEFT']: str1 = str1 + ' ' * space elif align in ['right', 'r', 'R', 'Right', 'RIGHT']: str1 = ' ' * space + str1 elif align in ['center', 'c', 'C', 'Center', 'CENTER', 'centre']: str1 = ' ' * (space // 2) + str1 + ' ' * (space - space // 2) return str1 def geshi(a, b, c): return alignment(str(a)) + alignment(str(b), 18) + alignment(str(c)) + '\n' w_s = geshi('序号', '词', '频率') wordcount = sorted([(w, words.count(w)) for w in set(words)], key=lambda t: (-t[1], t[0])) for (w, c) in wordcount: w_s += geshi(wordcount.index((w, c)) + 1, w, c) writefile = '\\ar.txt' with open(writefile, 'w') as wf: wf.write(w_s) |