python项目代码统计_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))

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

时间: 2019-09-16

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值