python练习册 每天一个小程序 第0007题

 1 # -*-coding:utf-8-*-
 2 __author__ = 'Deen'
 3 '''
 4 题目描述:
 5     有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
 6 
 7     根据注释和正常语句的区别,进行筛选计数
 8 '''
 9 
10 import os
11 
12 
13 # 首先还是获取该目录下所有文件名,返回一个list进行储存
14 def list_files(dir, wirldcard, recursion):
15     files_text = list()
16     exts = wirldcard.split(" ")
17     files = os.listdir(dir)
18     for name in files:
19         fullname = os.path.join(dir, name)
20         if (os.path.isdir(fullname) & recursion):
21             list_files(fullname, wirldcard, recursion)
22         else:
23             for ext in exts:
24                 if (name.endswith(ext)):
25                     files_text.append(fullname)
26                     break
27     # print files_text
28     return files_text
29 
30 
31 def count(file):
32     blank_num = 0
33     code_num = 0
34     annotations_num = 0
35     line_num = 0
36     annotations_nums = list()
37     with open(file) as fp:
38         for line in fp.readlines():
39             line_num += 1
40             line = line.strip('\n')
41             if '#' in line:
42                 annotations_num += 1
43             if "'''" in line:
44                 annotations_nums.append(line_num)
45             elif len(line) > 0:
46                 code_num += 1
47             else:
48                 blank_num += 1
49 
50         fp.close()
51 
52     j = 0
53     result = 0
54     for i in annotations_nums:
55         j += 1
56         if j % 2 == 0:
57             result += int(i) - annotations_nums[j - 2]
58     return code_num, annotations_num + result + 1, blank_num
59 
60 
61 if __name__ == '__main__':
62     files = list_files('G://code')
63     for file in files:
64         count_result = count(file)
65         dic = dict(zip(['code_num', 'annotations_num', 'blank_num'], list(count_result)))
66         print dic

 

posted on 2017-07-13 10:30  _Deen  阅读(258)  评论(0编辑  收藏  举报

导航