python实现代码统计程序
本文实例为大家分享了python实现代码统计程序的具体代码,供大家参考,具体内容如下
#encoding="utf-8"
"""
统计代码行数
"""
importsys
importos
defcount_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"
withopen(path,"r",encoding=encoding_type)asfp:
forlineinfp:
#空行不统计
ifline.strip():
line=line.strip()
#注意下面的这两个elif必须要前面,这样子当('"""')结束之后及时将flag置为True
ifline.endswith('"""')andflag==False:
flag=True
continue
ifline.endswith("'''")andflag==False:
flag=True
continue
ifflag==False:
continue
ifline.startswith("#!")orline.startswith("#-*-")orline.startswith("#encoding"):
countLine+=1
#如果以“#”号开头的,不统计
elifline.startswith("#"):
continue
#如果同时以("'''")或者('"""')开头或者结尾(比如:"""aaa"""),那么不统计
elifline.startswith('"""')andline.endswith('"""')andline!='"""':
continue
elifline.startswith("'''")andline.endswith("'''")andline!="'''":
continue
#如果以("'''")或者('"""')开头或者结尾(比如:aaa"""或者"""bbb),那么不统计
#注意下面的这两个elif必须要放后面
elifline.startswith('"""')andflag==True:
flag=False
continue
elifline.startswith("'''")andflag==True:
flag=False
continue
else:
countLine+=1
returncountLine
defcount_codes(path,file_types=[]):
"""统计所有文件代码行"""
#判断path是目录还是文件,如果是目录的话,遍历目录下所有的文件
ifnotos.path.exists(path):
print("您输入的路径不存在!")
return0
countTotalLine=0
file_paths={}
ifos.path.isdir(path):
forroot,dirs,filesinos.walk(path):
fornameinfiles:
ifnotfile_types:
file_types=["txt","py"]
#print(file_types)
ifos.path.splitext(name)[1][1:]infile_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:
ifnotfile_types:
file_types=["txt","py"]
ifos.path.splitext(path)[1][1:]infile_types:
countTotalLine=count_file_line(path)
file_paths[path]=count_file_line(path)
returncountTotalLine,file_paths
if__name__=="__main__":
#打印出命令行输入的参数
#print(sys.argv)
iflen(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))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。