Python学习教程:如何用python统计代码行数

Python学习教程:如何用python统计代码行数

改良后的代码可以对python和C系列的代码实行行数计算,包括代码、空行和注释行,用re抓取注释,传入一个目录自动对其下的文件进行读取计算

Python学习教程:如何用python统计代码行数

流程

首先判断传入参数是否为文件夹,不是则打印出提示,否则继续(无返回),获得目录后,yongos.listdir对路径下文件进行遍历,其中也包含文件夹,再次判断是否为文件夹,是的话则递归调用此函数,否则开始执行行数统计,这里用os.path.join将路径与文件名进行拼接,方便之后直接传给函数,逻辑很简单,无非是执行文件判断,判断是哪类文件,在调用对应的注释监测正则代码段进行抓取,抓取到则行数+1,空白行也是一样的原理,用strip(去除前后空格),然后行内内容为空则为空行,代码段即为总行数减去其他两类行数,最后在外层将所有文件对应的代码段累加即为total

关键

函数内部是可以访问全局变量的,问题在于函数内部修改了变量,导致python认为它是一个局部变量。

所以,如果在函数内部访问并修改全局变量,应该使用关键字 global 来修饰变量

import os
import re
#定义规则抓取文件中的python注释
re_obj_py = re.compile('[(#)]')
#定义规则抓取文件中的C语言注释
re_obj_c = re.compile('[(//)(/*)(*)(*/)]')
#判断是否为python文件
def is_py_file(filename):
if os.path.splitext(filename)[1] == '.py':
return True
else:
return False
#判断是否为c文件
def is_c_file(filename):
if os.path.splitext(filename)[1] in ['.c', '.cc', '.h']:
return True
else:
return False
#定义几个全局变量用于计算所有文件总和(全部行数、代码行数、空行数、注释行数)
all_lines, code_lines, space_lines, comments_lines = 0, 0, 0, 0
#判断是否为文件夹,不是则输出提示
def count_codelines(dirpath):
if not os.path.isdir(dirpath):
print('input dir: %s is not legal!' % dirpath)
return
# 定义几个全局变量用于计算每个文件行数(全部行数、代码行数、空行数、注释行数)
global all_lines, code_lines, space_lines, comments_lines
#列出当前文件夹下的文件(包含目录)
all_files = os.listdir(dirpath)
for file in all_files:
#将文件(目录)名与路径拼接
file_name = os.path.join(dirpath, file)
if os.path.isdir(file_name):
count_codelines(file_name)
else:
temp_all_lines, temp_code_lines, temp_space_lines, temp_comments_lines = 0, 0, 0, 0
f = open(file_name)
for line in f:
temp_all_lines += 1
if line.strip() == '':
temp_space_lines += 1
continue
if is_py_file(file_name) and re_obj_py.match(line.strip()):
temp_comments_lines += 1
if is_c_file(file_name) and re_obj_c.match(line.strip()):
temp_comments_lines += 1
temp_code_lines = temp_all_lines - temp_space_lines - temp_comments_lines
print('%-15s : all_lines(%s)\t code_lines(%s)\t space_lines(%s)\t comments_lines(%s)'
% (file, temp_all_lines, temp_code_lines, temp_space_lines, temp_comments_lines))
all_lines += temp_all_lines
code_lines += temp_code_lines
space_lines += temp_space_lines
comments_lines += temp_comments_lines
if __name__ == '__main__':
count_codelines('test')
print('\n**** TOTAL COUNT ****\nall_lines = %s\ncode_lines = %s\nspace_lines = %s\ncomments_lines = %s' % (all_lines, code_lines, space_lines, comments_lines))

本期的 Python学习教程 先跟大家分享这么多!


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/69923331/viewspace-2652365/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/69923331/viewspace-2652365/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python代码行数统计工具有很多种,以下是其中几种常用的工具: 1. cloc:cloc是一款开源的多语言代码行数统计工具,可以统计各种编程语言的代码行数,包括Python。它可以生成详细的代码统计报告,包括代码行数、空行数、注释行数等。使用cloc,您可以通过命令行或者图形界面界面来统计Python代码行数。 2. Pygount:Pygount是一个基于Python代码行数统计工具,它可以统计各种编程语言的代码行数,包括Python。Pygount提供了一个简单易用的命令行界面,可以输出代码行数统计结果。 3. SLOCCount:SLOCCount是一个流行的代码行数统计工具,可以统计多种编程语言的代码行数。它可以生成详细的代码行数统计报告,包括代码行数、空行数、注释行数等。SLOCCount可以通过命令行界面或者图形界面来统计Python代码行数。 4. Radon:Radon是一个Python代码复杂性分析工具,它也可以用来统计代码行数。Radon提供了各种度量方法,包括LOC (Lines of Code)、LLOC (Logical Lines of Code)、SLOC (Source Lines of Code)等,可以帮助您更全面地了解代码的复杂性和行数。 以上是几种常用的Python代码行数统计工具,您可以根据自己的需求和喜好选择适合的工具进行使用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [Python实现代码行数统计工具](https://blog.csdn.net/weixin_30664539/article/details/99054675)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [chatgpt赋能pythonPython代码行数统计-统计Python代码行数的常用工具与使用方法](https://blog.csdn.net/findyi123/article/details/130980303)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值