作为一个编程人员,每天除了测试外,很大一部分的时间都在敲代码中度过。那么有没有人想过我们写的代码到底有多少行呢?逐条去查数目显然是不现实的,不说浪费了大量的时间,而且我们人工的查数会出现失误,一行行密密麻麻的代码也看着头晕眼花的。下面小编就教大家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中的代码行数是怎么计算的?相关推荐

  1. Git统计代码行数;Java实现统计代码行数,忽略空行、注释行

    前言 某天,产品叫我算下某个项目的代码行数,我一愣,这怎么统计?总不可能一个文件一个文件算吧?后面我找了下,git是可以统计提交到仓库的所有的代码的,不过有个问题,就是假如有些文件我不想算进去怎么办? ...

  2. python代码行数统计工具_Python实现代码行数统计工具的功能(实例)

    本篇文章给大家带来的内容是关于Python实现代码行数统计工具的功能(实例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 我们经常想要统计项目的代码行数,但是如果想统计功能比较完善 ...

  3. webstorm代码行数统计_来测试下 2019 你一共写了多少行代码?

    写啊写代码,2019 你都写了多少行代码呢 自己动手实现一个代码统计工具 导入所需的库 这个程序需要用到的库有:os,time 这两个库都是 Python 自带的,所以我们直接 import 就行 i ...

  4. Visual Studio 2005 插件编程(代码行数统计插件)之一

    原文:http://www.codeproject.com/useritems/LineCounterAddin.asp 注意:1.本文中的提到的"外接程序"等同与"插件 ...

  5. 如何统计项目的代码行数

    如何统计项目的代码行数 博客分类: Work summary 公司想要申请软件著作权,需要统计代码行数,找到方法如下: 方法一: 推荐:使用source counter软件进行统计,统计结果很详细. ...

  6. 马斯克新要求+1:写周报,具体到代码行数的那种……

    自从埃隆・马斯克( Elon Musk )入主 Twitter 以来,一些的操作紧随其后展开,先有要求工程师默写代码,随后又解雇纠错员工.裁了近八成工程师.整顿系统架构--这也让马斯克一跃成坐拥&qu ...

  7. 统计 Git 代码行数

    要统计 Git 代码行数,您可以使用以下命令: git log --author=<作者> --pretty=tformat: --numstat | awk '{ add += $1 - ...

  8. 代码行数统计工具statistic和cloc的使用

    简介 Cloc是一款使用Perl语言开发的开源代码统计工具,支持多平台使用.多语言识别,能够计算指定目标文件或文件夹中的文件数(files).空白行数(blank).注释行数(comment)和代码行 ...

  9. 【git】Git 指令统计代码行数

    目录 统计代码行数 加过滤条件 统计代码行数 统计当前项目代码行数 git ls-files | xargs cat | wc -l 细分每个文件的代码行数,相当于把上面命令细化: git ls-fi ...

最新文章

  1. MySQL中Order By与Limit不要一起用
  2. WIN10系统上,新建AliOS Things项目
  3. 深刻揭示Python 与C/C++互动
  4. iOS UINavigationController
  5. Source Insight主题推荐和显示属性设置方法
  6. CVPR 2019 论文和开源项目合集(Papers with Code)
  7. 构建之法第二章读后感
  8. SQL批量提交修改业务
  9. python查询斐波那契数列通项公式_斐波那契数列求解总结(Python版)
  10. jquery 全选获取值
  11. 4大华为云“安全镖局”秘密法宝揭秘
  12. html设置导入字体样式表,HTML CSS@face 导入字体
  13. C# 中关于汉字与16进制转换的代码
  14. RequiredFieldValidator控件--必填验证控件
  15. Solaris 11中的变化
  16. java -jar bat_java jar包和bat批处理命令
  17. 百度文库无需VIP和下载券直接下载
  18. 树形控件之思维导图 Android
  19. 新型城镇化3.0时代 数据交换是“智慧城市”的核心
  20. Gabor滤波器学习

热门文章

  1. 万能makefile深入浅出- 第一篇
  2. Hive 05_hive变量、动态分区
  3. JavaSE各阶段练习题----Map
  4. leetcode 85. Maximal Rectangle | 85. 最大矩形(单调栈)
  5. 【JavaScript】js数组与字符串的相互转换
  6. 【verilog语法】always@(*)自动添加敏感变量列表
  7. C++ 贪吃蛇 小游戏
  8. nodejs的调试debug
  9. java深入理解浅拷贝和深拷贝
  10. DPDK精准测量时间