Problem: 任一个英文的纯文本文件,统计其中的单词出现的个数。

Solution: Words Counter, Python:

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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Date : 2015-03-07 12:41:14
# @Author : NSSimacer
# @Version : 1.0
import re
def count_words(file_name):
'''
统计纯英文文本中单词出现的个数
'''
words = []
words_dict = {}
lines_count = 0
with open(file_name, 'r') as f:
for line in f:
lines_count += 1
# 过滤非英文单词
words.extend(re.findall(r'[a-zA-Z0-9]+', line.strip()))
for word in words:
if word not in words_dict:
words_dict[word] = 1
else:
words_dict[word] += 1
return lines_count, len(words), words, words_dict
if __name__ == '__main__':
file_name = 'plain_text.txt'
result = count_words(file_name)
print 'In file:', file_name
print 'Total Lines:', result[0]
print 'Total Words:', result[1]
print 'Words:', ', '.join(result[2])
print 'Frequency of each word:'
for key, value in result[3].items():
print '%s: %s' % (key, value)

主要目的是练习 Python 操作文件 —— 文件读取 open(self, args),按行处理文件 f.readline(self)。其次涉及到几个 string 的操纵方法 —— strip(self)split(self, regx)。此外,使用 with 使得程序更加简洁,使用正则表达式模块 re 的一些方法(如 findall(self, pattern))过滤出需要的结果。

更多 API,请参考 Understanding Python’s “with” statement; Regular expression operations.

题目来源:Python 练习册,每天一个小程序 THX!