原题
有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释
collections
collections是Python内建的一个集合模块,提供了许多有用的集合类
其中Counter
可以很方便的实现计数功能
对于Counter
:
-
创建
-
c = Counter()
创建空的计数器 -
c = Counter('gallahad')
使用可迭代对象创建计数器 -
c = Counter({'red': 4, 'blue': 2})
使用集合创建计数器 -
c = Counter(cats=4, dogs=8)
使用关键字创建计数器
-
-
elements()
c = Counter(a=4, b=2, c=0, d=-2) list(c.elements()) result ['a', 'a', 'a', 'a', 'b', 'b']
按照计数器中的数值重复key生成迭代对象
-
most_common(n)
Counter('abracadabra').most_common(3) result [('a', 5), ('r', 2), ('b', 2)]
取出计数器中数量最多的n个元素
-
subtract
c = Counter(a=4, b=2, c=0, d=-2) d = Counter(a=1, b=2, c=3, d=4) c.subtract(d) c result Counter({'a': 3, 'b': 0, 'c': -3, 'd': -6})
两个计数器的数值相减
os
python操作操作系统提供的接口函数
-
path
封装了对文件路径的一些操作,如path.splitext()
可以获取文件和文件扩展名 -
walk
可以遍历目录,获取其中的根目录,文件夹,文件
代码
"""
有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。
"""
from os import walk, path
from collections import Counter
counter = Counter(class_num=0, code_lines=0, space_lines=0, comments_lines=0)
def get_lines_from_java_file(path):
with open(path) as f:
for line in f:
counter['code_lines'] += 1
if line == '\n':
counter['space_lines'] += 1
elif line.startswith('/') or line.startswith('*'):
counter['comments_lines'] += 1
counter['code_lines'] += 1
def get_java_file_paths(workspace_path):
for root, dirs, files in walk(workspace_path):
for filename in files:
postfix = path.splitext(filename)[1]
if postfix == '.java':
counter['class_num'] += 1
file_path = path.join(root, filename)
get_lines_from_java_file(file_path)
if __name__ == '__main__':
workspace_path = '/Users/Mac/Desktop/Xinjr/app/src/main/java'
get_java_file_paths(workspace_path)
print(counter)
网友评论