python程序中怎样数个数_python3中的代码行数是怎么计算的?
作为一个编程人员,每天除了测试外,很大一部分的时间都在敲代码中度过。那么有没有人想过我们写的代码到底有多少行呢?逐条去查数目显然是不现实的,不说浪费了大量的时间,而且我们人工的查数会出现失误,一行行密密麻麻的代码也看着头晕眼花的。下面小编就教大家python3中代码行数计算的方法。
首先判断传入参数是否为文件夹,不是则打印出提示,否则继续(无返回),获得目录后,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学习指路:PyThon学习网教学中心。
python程序中怎样数个数_python3中的代码行数是怎么计算的?相关推荐
- Git统计代码行数;Java实现统计代码行数,忽略空行、注释行
前言 某天,产品叫我算下某个项目的代码行数,我一愣,这怎么统计?总不可能一个文件一个文件算吧?后面我找了下,git是可以统计提交到仓库的所有的代码的,不过有个问题,就是假如有些文件我不想算进去怎么办? ...
- python代码行数统计工具_Python实现代码行数统计工具的功能(实例)
本篇文章给大家带来的内容是关于Python实现代码行数统计工具的功能(实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们经常想要统计项目的代码行数,但是如果想统计功能比较完善 ...
- webstorm代码行数统计_来测试下 2019 你一共写了多少行代码?
写啊写代码,2019 你都写了多少行代码呢 自己动手实现一个代码统计工具 导入所需的库 这个程序需要用到的库有:os,time 这两个库都是 Python 自带的,所以我们直接 import 就行 i ...
- Visual Studio 2005 插件编程(代码行数统计插件)之一
原文:http://www.codeproject.com/useritems/LineCounterAddin.asp 注意:1.本文中的提到的"外接程序"等同与"插件 ...
- 如何统计项目的代码行数
如何统计项目的代码行数 博客分类: Work summary 公司想要申请软件著作权,需要统计代码行数,找到方法如下: 方法一: 推荐:使用source counter软件进行统计,统计结果很详细. ...
- 马斯克新要求+1:写周报,具体到代码行数的那种……
自从埃隆・马斯克( Elon Musk )入主 Twitter 以来,一些的操作紧随其后展开,先有要求工程师默写代码,随后又解雇纠错员工.裁了近八成工程师.整顿系统架构--这也让马斯克一跃成坐拥&qu ...
- 统计 Git 代码行数
要统计 Git 代码行数,您可以使用以下命令: git log --author=<作者> --pretty=tformat: --numstat | awk '{ add += $1 - ...
- 代码行数统计工具statistic和cloc的使用
简介 Cloc是一款使用Perl语言开发的开源代码统计工具,支持多平台使用.多语言识别,能够计算指定目标文件或文件夹中的文件数(files).空白行数(blank).注释行数(comment)和代码行 ...
- 【git】Git 指令统计代码行数
目录 统计代码行数 加过滤条件 统计代码行数 统计当前项目代码行数 git ls-files | xargs cat | wc -l 细分每个文件的代码行数,相当于把上面命令细化: git ls-fi ...
最新文章
- MySQL中Order By与Limit不要一起用
- WIN10系统上,新建AliOS Things项目
- 深刻揭示Python 与C/C++互动
- iOS UINavigationController
- Source Insight主题推荐和显示属性设置方法
- CVPR 2019 论文和开源项目合集(Papers with Code)
- 构建之法第二章读后感
- SQL批量提交修改业务
- python查询斐波那契数列通项公式_斐波那契数列求解总结(Python版)
- jquery 全选获取值
- 4大华为云“安全镖局”秘密法宝揭秘
- html设置导入字体样式表,HTML CSS@face 导入字体
- C# 中关于汉字与16进制转换的代码
- RequiredFieldValidator控件--必填验证控件
- Solaris 11中的变化
- java -jar bat_java jar包和bat批处理命令
- 百度文库无需VIP和下载券直接下载
- 树形控件之思维导图 Android
- 新型城镇化3.0时代 数据交换是“智慧城市”的核心
- Gabor滤波器学习