使用Python设计一个代码统计工具

yizhihongxing

使用Python设计一个代码统计工具可以帮助开发者统计代码行数、空行数、注释行数等信息,对于项目管理和代码规范性检查具有很大的帮助作用。下面是设计这个工具的完整攻略。

设计思路

1.首先,我们需要获取代码文件路径,可以使用命令行参数来实现。使用sys.argv获取命令行参数列表,第一个参数是脚本名称,后面的参数依次代表输入的代码文件路径。

2.其次,我们需要遍历代码目录下的所有文件,可以使用os模块中的walk函数实现。

3.然后,我们需要按照代码、注释、空行的规则统计每个文件中的行数。可以定义3个变量:code_linescomment_linesblank_lines来分别表示代码行数、注释行数、空行数。使用正则表达式匹配判断每一行的类型,归入对应的行类型。

4.最后,我们需要将每个文件的统计结果累加到总行数中。

代码实现

import os
import sys
import re

def count_lines(filepath):
    '''统计对应文件的代码行数、注释行数、空行数'''
    code_lines = 0
    comment_lines = 0
    blank_lines = 0
    with open(filepath, 'r', encoding='utf-8') as fp:
        for line in fp:
            if re.match(r'^\s*$', line):  # 空行
                blank_lines += 1
            elif re.match(r'^\s*#', line):  # 注释行
                comment_lines += 1
            else:  # 代码行
                code_lines += 1
    return code_lines, comment_lines, blank_lines

if __name__ == '__main__':
    code_lines_total = 0  # 总代码行数
    comment_lines_total = 0  # 总注释行数
    blank_lines_total = 0  # 总空行数
    try:
        for path in sys.argv[1:]:
            if os.path.isfile(path):
                code_lines, comment_lines, blank_lines = count_lines(path)
                code_lines_total += code_lines
                comment_lines_total += comment_lines
                blank_lines_total += blank_lines
                print(f'在 {path} 中: 代码行数: {code_lines}, 注释行数: {comment_lines}, 空行数: {blank_lines}')
            elif os.path.isdir(path):
                for dirpath, dirnames, filenames in os.walk(path):
                    for filename in filenames:
                        if filename.endswith('.py'):
                            filepath = os.path.join(dirpath, filename)
                            code_lines, comment_lines, blank_lines = count_lines(filepath)
                            code_lines_total += code_lines
                            comment_lines_total += comment_lines
                            blank_lines_total += blank_lines
                            print(f'在 {filepath} 中: 代码行数: {code_lines}, 注释行数: {comment_lines}, 空行数: {blank_lines}')
            else:
                print(f'{path} 不是有效的文件或目录')
    except Exception as e:
        print(e)

    print(f'总代码行数: {code_lines_total}, 总注释行数: {comment_lines_total}, 总空行数: {blank_lines_total}')

示例说明

例如,我们有一个包含以下三个文件的项目。

project/
├── main.py 
├── module1.py
└── test/
    └── testcase.py

main.py 代码如下。

# main.py
import module1


def print_hello():
    print('Hello, world!')


if __name__ == '__main__':
    print_hello()
    module1.add(1, 2)

module1.py 代码如下。

# module1.py

def add(a, b):
    return a + b

testcase.py 代码如下。

# testcase.py

import unittest

class TestAdd(unittest.TestCase):

    def test_add(self):
        self.assertEqual(add(1, 2), 3)


if __name__ == '__main__':
    unittest.main()

我们在命令行中运行以下命令,即可得到统计结果。

python count_lines.py project

输出结果为

在 project/main.py 中: 代码行数: 5, 注释行数: 2, 空行数: 1
在 project/module1.py 中: 代码行数: 2, 注释行数: 1, 空行数: 0
在 project/test/testcase.py 中: 代码行数: 8, 注释行数: 2, 空行数: 1
总代码行数: 15, 总注释行数: 5, 总空行数: 2

从结果可以看出,本次统计涵盖了项目目录下所有的 .py 文件,包括子目录中的文件。而且每个文件的统计结果也都正确。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Python设计一个代码统计工具 - Python技术站

(0)
上一篇 2023年5月30日
下一篇 2023年5月30日

相关文章

  • python strip()函数 介绍

    当我们处理字符串时,通常会出现字符串前后空格的问题,这时候就可以使用 strip() 函数来移除字符串两端的空白字符,以便于后续的字符串处理操作。 strip() 函数的用法 strip() 函数的语法为:str.strip([chars]),其中 str 表示要处理的字符串,chars 参数可选,用于指定要移除的字符集合。 具体来说,strip() 函数将…

    python 2023年6月5日
    00
  • 已解决卸载pip重新安装的方法

    关于“已解决卸载pip重新安装的方法”的完整攻略,可以分为以下几个步骤: 卸载旧版本的pip 可以使用以下命令卸载旧版本的pip: python -m pip uninstall pip 如果你使用的是Linux或macOS操作系统,则需要在命令前加上sudo来获取管理员权限,如下所示: sudo python -m pip uninstall pip 下载…

    python 2023年5月14日
    00
  • python中的数组赋值与拷贝的区别详解

    下面是关于“python中的数组赋值与拷贝的区别详解”的完整攻略: 为什么要区别赋值与拷贝 在Python中,我们可以使用=来进行赋值操作。但在使用=赋值时,可能出现的问题是在对变量进行修改时,会更改原本的值,这可能会影响程序中其他变量所使用的值。因此,当我们需要使用多个变量来表示数组时,我们需要区分赋值和拷贝。 数组赋值的基本原理 在Python中,当我们…

    python 2023年6月5日
    00
  • 在自动化中用python实现键盘操作的方法详解

    在自动化中用Python实现键盘操作的方法详解 自动化是一种工具,它可以在程序运行时模拟用户输入输出,从而可以在人类存在的时候自动完成任务。在Python中,我们可以使用模块 pyautogui 实现键盘操作的自动化。在这里,我们将讨论如何使用 pyautogui 实现键盘操作自动化。 安装 pyautogui 在使用 pyautogui 进行自动化之前,必…

    python 2023年5月19日
    00
  • 用Python识别人脸,人种等各种信息

    下面是用Python识别人脸和人种等信息的完整攻略。 1. 安装依赖库 首先,我们需要安装一些Python的依赖库,包括OpenCV、NumPy、matplotlib等。使用pip命令可以快速安装这些库。 pip install opencv-python numpy matplotlib 2. 下载人脸检测器和人种分类器 接下来,需要下载人脸检测器和人种分…

    python 2023年5月18日
    00
  • 深入了解Python中的变量类型标注

    深入了解Python中的变量类型标注是一项重要的技能,有助于写出更加清晰、健壮的代码。下面是一份完整攻略: 步骤一:什么是变量类型标注? 简单来说,变量类型标注就是在Python代码中为变量指定数据类型,以便编译器更好地理解代码,并在运行期间捕获可能出现的类型错误。例如,函数的参数可以使用类型标注来指定它所期望的数据类型,如下所示: def greet(na…

    python 2023年5月13日
    00
  • 聊聊python中的循环遍历

    下面是针对“聊聊python中的循环遍历”的详细攻略: 一、循环遍历的概述 循环遍历是指在程序中对一系列数据进行遍历操作的过程,逐个访问指定数据中的每一个元素。在python中,常用的循环遍历语句有for和while语句。 二、for循环的遍历方法 1. 遍历列表 可以使用for循环对列表进行遍历操作,示例如下: lst = [1, 2, 3, 4, 5] …

    python 2023年5月19日
    00
  • Python中查看变量的类型内存地址所占字节的大小

    要查看Python中变量的类型,内存地址和所占字节大小,可以使用type()、id()和sys.getsizeof()三个函数。 type()函数用于查看变量类型 “`python x = 5 print(type(x)) # y = 3.14 print(type(y)) # “` id()函数用于查看变量内存地址 “`python x = 5 pr…

    python 2023年6月2日
    00
合作推广
合作推广
分享本页
返回顶部