美文网首页
Python 练习册 7-统计代码

Python 练习册 7-统计代码

作者: 双核孤城 | 来源:发表于2017-08-09 10:11 被阅读42次

题目取自Yixiaohan的python练习册

原题

有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释

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)

相关文章

网友评论

      本文标题:Python 练习册 7-统计代码

      本文链接:https://www.haomeiwen.com/subject/fasfrxtx.html