Problem: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。

Solution: Code 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
59
60
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
# @Date : 2015-03-10 14:15:22
# @Author : NSSimacer
# @Version : 1.0
import os
def count_code(base_dir):
'''
统计给出目录下所有 Python 程序代码行数(包括注释,真正代码和空行)
'''
comment_count = 0
code_count = 0
blank_count = 0
for root, dirs, files in os.walk(base_dir): # 从根目录开始遍历
for afile in files:
# 遇到文件判断是否是 Python 代码文件
if os.path.splitext(afile)[1][1:] in ['py']:
try:
with open(root + os.sep + afile, 'r') as f:
for line in f:
# if line == '\n'
if not line.split(): # 空行判断
blank_count += 1
elif line.strip().startswith('#'): # 注释判断
comment_count += 1
else:
code_count += 1
except IOError, ioe:
print ioe
return comment_count, code_count, blank_count
if __name__ == '__main__':
base_dir = 'D:' + os.sep + 'workspace-sublime text3'
print 'Comment Lines: %s\nCode Lines: %s\nBlank Lines: %s'\
% count_code(base_dir)

主要目的是练习 Python 操作文件和字符串。需要知道 os.walk(self, args) 的用法,以及 Python 源代码文件中空行,注释和真正代码行的特点。

关于 os.walk(self, args)os.path.walk(self, args) 的区别,可参考文章:
os.walk 和os.path.walk的区别

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