首页 > 编程 > Python > 正文

python实现代码统计程序

2019-11-25 11:41:44
字体:
来源:转载
供稿:网友

本文实例为大家分享了python实现代码统计程序的具体代码,供大家参考,具体内容如下

# encoding="utf-8""""统计代码行数"""import sysimport osdef count_file_line(path): """统计文件的有效行数""" countLine = 0 # 设置一个标志位,当遇到以"""或者'''开头或者结尾的时候,置为False flag = True # 使用utf-8格式的编码方式读取文件,如果读取失败,将使用gbk编码方式读取文件 try: fp = open(path, "r", encoding="utf-8") encoding_type = "utf-8" fp.close() except: encoding_type = "gbk" with open(path, "r", encoding=encoding_type) as fp: for line in fp:  # 空行不统计  if line.strip():  line = line.strip()  # 注意下面的这两个elif必须要前面,这样子当('"""')结束之后及时将flag置为True  if line.endswith('"""') and flag == False:   flag = True   continue  if line.endswith("'''") and flag == False:   flag = True   continue  if flag == False:   continue  if line.startswith("#!") or line.startswith("#-*-") or line.startswith("# encoding"):   countLine += 1  # 如果以“#”号开头的,不统计  elif line.startswith("#"):   continue  # 如果同时以("'''")或者('"""')开头或者结尾(比如:"""aaa"""),那么不统计  elif line.startswith('"""') and line.endswith('"""') and line != '"""':   continue  elif line.startswith("'''") and line.endswith("'''") and line != "'''":   continue  # 如果以("'''")或者('"""')开头或者结尾(比如:aaa"""或者"""bbb),那么不统计  # 注意下面的这两个elif必须要放后面  elif line.startswith('"""') and flag == True:   flag = False   continue  elif line.startswith("'''") and flag == True:   flag = False   continue  else:   countLine += 1 return countLinedef count_codes(path,file_types=[]): """统计所有文件代码行""" # 判断path是目录还是文件,如果是目录的话,遍历目录下所有的文件 if not os.path.exists(path): print("您输入的路径不存在!") return 0 countTotalLine = 0 file_paths = {} if os.path.isdir(path): for root,dirs,files in os.walk(path):  for name in files:  if not file_types:   file_types = ["txt","py"]   # print(file_types)  if os.path.splitext(name)[1][1:] in file_types:   file_path = os.path.normpath(os.path.join(root,name))   # print(file_path)   file_lines = count_file_line(file_path)   countTotalLine += file_lines   file_paths[file_path] = file_lines else: if not file_types:  file_types = ["txt","py"] if os.path.splitext(path)[1][1:] in file_types:  countTotalLine = count_file_line(path)  file_paths[path] = count_file_line(path) return countTotalLine,file_pathsif __name__ == "__main__": # 打印出命令行输入的参数 # print(sys.argv) if len(sys.argv) < 2: print("请输入路径!") sys.exit() path = sys.argv[1] # print(path) file_types = sys.argv[2:] # print(file_types) print(count_codes(path,file_types))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表