python实现代码统计程序

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

# encoding="utf-8"

"""
统计代码行数
"""

import sys
import os

def 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 countLine

def 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_paths

if __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))

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

(0)

相关推荐

  • 使用Python设计一个代码统计工具

    问题 设计一个程序,用于统计一个项目中的代码行数,包括文件个数,代码行数,注释行数,空行行数.尽量设计灵活一点可以通过输入不同参数来统计不同语言的项目,例如: # type用于指定文件类型 python counter.py --type python 输出: files:10 code_lines:200 comments:100 blanks:20 分析 这是一个看起来很简单,但做起来有点复杂的设计题,我们可以把问题化小,只要能正确统计一个文件的代码行数,那么统计一个目录也不成问题,其中最复

  • python tkinter图形界面代码统计工具

    本文为大家分享了python tkinter图形界面代码统计工具,供大家参考,具体内容如下 #encoding=utf-8 import os,sys,time from collections import defaultdict from tkinter import * import tkinter.messagebox from tkinter import ttk from tkinter import scrolledtext root= Tk() root.title("有效代码统

  • python tkinter图形界面代码统计工具(更新)

    本文为大家分享了python tkinter图形界面代码统计工具的更新版,供大家参考,具体内容如下 代码统计工具 修改了导出excel功能,把原来的主文件进行了拆分 code_count_windows.py #encoding=utf-8 import os,sys,time from collections import defaultdict from tkinter import * import tkinter.messagebox from tkinter import ttk fr

  • Python实现代码统计工具(终极篇)

    本文对于先前系列文章中实现的C/Python代码统计工具(CPLineCounter),通过C扩展接口重写核心算法加以优化,并与网上常见的统计工具做对比.实测表明,CPLineCounter在统计精度和性能方面均优于其他同类统计工具.以千万行代码为例评测性能,CPLineCounter在Cpython和Pypy环境下运行时,比国外统计工具cloc1.64分别快14.5倍和29倍,比国内SourceCounter3.4分别快1.8倍和3.6倍. 运行测试环境 本文基于Windows系统平台,运行和

  • python实现代码统计程序

    本文实例为大家分享了python实现代码统计程序的具体代码,供大家参考,具体内容如下 # encoding="utf-8" """ 统计代码行数 """ import sys import os def count_file_line(path): """统计文件的有效行数""" countLine = 0 # 设置一个标志位,当遇到以""&quo

  • Python实现代码统计工具

    本文实例为大家分享了Python实现代码统计工具的具体代码,供大家参考,具体内容如下 思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加. 实现的功能: 统计每个文件的行数: 统计总行数: 支持指定统计文件类型,排除不想统计的文件类型: 排除空行: 排除注释行 import os import sys import os.path #for i in sys.argv: # print (i) # 判断单个文件的代码行数 def count_file_lines(file_pa

  • Python编程之gui程序实现简单文件浏览器代码

    本文主要分享了关于在python中实现一个简单的文件浏览器的代码示例,代码及展示如下. #!/usr/bin/env python # -*- coding: UTF-8 -*- import os from time import sleep from Tkinter import * class DirList(object): def __init__(self, initdir=None): '''构造函数,说明版本信息''' self.top = Tk() self.label = L

  • Python简单基础小程序的实例代码

    1 九九乘法表 for i in range(9):#从0循环到8 i += 1#等价于 i = i+1 for j in range(i):#从0循环到i j += 1 print(j,'*',i,'=',i*j,end = ' ',sep='') # end默认在结尾输出换行,将它改成空格 sep 默认 j,'*',i,'=',i*j 各元素输出中间会有空格 print()#这里作用是输出换行符 i = 1 while i <= 9: j = 1 while j <= i: print(&

  • java实现代码统计小程序

    本文实例为大家分享了java代码统计小程序,供大家参考,具体内容如下 可以测试每周你的工作量 package rexExp; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; public class CodeCounter { //三个静态变量存储行数 st

  • Python Flask微信小程序登录流程及登录api实现代码

    一.先来看看效果 接口请求返回的数据: 二.官方登录流程图 三.小程序登录流程梳理: 1.小程序端调用wx.login 2.判断用户是否授权 3.小程序端访问 wx.getUserInfo 4.小程序端js代码: wx.login({ success: resp => { // 发送 res.code 到后台换取 openId, sessionKey, unionId console.log(resp); var that = this; // 获取用户信息 wx.getSetting({ su

随机推荐