用Python统计代码行数,真是太简单了!

作者: IT派森 | 来源:发表于2019-08-10 22:30 被阅读4次

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

流程

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

大家在学python的时候肯定会遇到很多难题,以及对于新技术的追求,这里推荐一下我们的Python学习扣qun:784758214,这里是python学习者聚集地!!同时,自己是一名高级python开发工程师,从基础的python脚本到web开发、爬虫、django、数据挖掘等,零基础到项目实战的资料都有整理。送给每一位python的小伙伴!每日分享一些学习的方法。和需要注意的小细节

这里是python学习者聚集地

关键

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

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

1.  import os 
2.  import re 
3.  #定义规则抓取文件中的python注释 
4.  re_obj_py = re.compile('[(#)]') 
5.  #定义规则抓取文件中的C语言注释 
6.  re_obj_c = re.compile('[(//)(/*)(*)(*/)]') 
7.  #判断是否为python文件 
8.  def is_py_file(filename): 
9.  if os.path.splitext(filename)[1] == '.py': 
10.  return True 
11.  else: 
12.  return False 
13.  #判断是否为c文件 
14.  def is_c_file(filename): 
15.  if os.path.splitext(filename)[1] in ['.c', '.cc', '.h']: 
16.  return True 
17.  else: 
18.  return False 
19.  #定义几个全局变量用于计算所有文件总和(全部行数、代码行数、空行数、注释行数) 
20.  all_lines, code_lines, space_lines, comments_lines = 0, 0, 0, 0 
21.  #判断是否为文件夹,不是则输出提示 
22.  def count_codelines(dirpath): 
23.  if not os.path.isdir(dirpath): 
24.  print('input dir: %s is not legal!' % dirpath) 
25.  return 
26.  # 定义几个全局变量用于计算每个文件行数(全部行数、代码行数、空行数、注释行数) 
27.  global all_lines, code_lines, space_lines, comments_lines 
28.  #列出当前文件夹下的文件(包含目录) 
29.  all_files = os.listdir(dirpath) 
30.  for file in all_files: 
31.  #将文件(目录)名与路径拼接 
32.  file_name = os.path.join(dirpath, file) 
33.  if os.path.isdir(file_name): 
34.  count_codelines(file_name) 
35.  else: 
36.  temp_all_lines, temp_code_lines, temp_space_lines, temp_comments_lines = 0, 0, 0, 0 
37.  f = open(file_name) 
38.  for line in f: 
39.  temp_all_lines += 1 
40.  if line.strip() == '': 
41.  temp_space_lines += 1 
42.  continue 
43.  if is_py_file(file_name) and re_obj_py.match(line.strip()): 
44.  temp_comments_lines += 1 
45.  if is_c_file(file_name) and re_obj_c.match(line.strip()): 
46.  temp_comments_lines += 1 
47.  temp_code_lines = temp_all_lines - temp_space_lines - temp_comments_lines 
48.  print('%-15s : all_lines(%s)\t code_lines(%s)\t space_lines(%s)\t comments_lines(%s)' 
49.  % (file, temp_all_lines, temp_code_lines, temp_space_lines, temp_comments_lines)) 
50.  all_lines += temp_all_lines 
51.  code_lines += temp_code_lines 
52.  space_lines += temp_space_lines 
53.  comments_lines += temp_comments_lines 
54.  if __name__ == '__main__': 
55.  count_codelines('test') 
56.  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和C系列的代码实行行数计算,包括代码、空行和注释行,用re抓取注释,传入一个目录自动...

  • Python实现代码行数统计工具

    转自:Python中文社区我们经常想要统计项目的代码行数,但是如果想统计功能比较完善可能就不是那么简单了, 今天我...

  • 实现python中的代码行数统计思路:

    实现python中的代码行数统计思路: 统计文件中代码的总行数减去空行单行注释以及多行注释功能: 1.获取文件内容...

  • Python 练习小工具,统计代码行数

    Python 练习小工具,统计代码行数。Java, C, Object-C, Swift

  • 统计代码行数

    申请软著或者是各种报告的时候,代码行数体现了我们的工作量~ 用一个简单的小脚本就可以统计出代码行数哦。 脚本如下:...

  • 行数统计

    用python实现简单的行数统计功能(暂未排除注释行,仅计算除却空行以外的行数) 步骤 遍历目录下文件名,获取后缀...

  • python实现的源码行数统计源码

    把代码过程比较常用的内容做个备份,下面的代码是关于python实现的行数统计的代码。 ''' Author:...

  • [code]统计项目代码量

    功能统计一个文件夹中所有指定后缀名文件中的数据行数 应用场景统计项目代码行数 代码 用例

  • 如何统计项目代码行数

    在Mac上计算你写了多少行代码 Linux下统计代码行数 Linux系统提供了wc命令来统计文件的行数 统计当前目...

  • find 命令的妙用

    1.统计代码行数命令 统计 src 目录下所有 .js 文件的代码行数 wc 命令返回结果[行数] [词数] [字...

网友评论

    本文标题:用Python统计代码行数,真是太简单了!

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