Python实现代码统计工具
本文实例为大家分享了Python实现代码统计工具的具体代码,供大家参考,具体内容如下
思路:首先获取所有文件,然后统计每个文件中代码的行数,最后将行数相加.
实现的功能:
统计每个文件的行数;
统计总行数;
支持指定统计文件类型,排除不想统计的文件类型;
排除空行;
排除注释行
importos
importsys
importos.path
#foriinsys.argv:
#print(i)
#判断单个文件的代码行数
defcount_file_lines(file_path):
line_count=0
flag=True
try:
fp=open(file_path,"r",encoding="utf-8")
encoding_type="utf-8"
fp.close()
except:
encoding_type="gbk"
withopen(file_path,"r",encoding=encoding_type)asfp:
forlineinfp:
#print(line_count)
ifline.strip()=="":
continue
else:
ifline.strip().endswith("'''")andflag==False:
flag=True
continue
ifline.strip().endswith('"""')andflag==False:
flag=True
continue
ifflag==False:
continue
ifline.strip().startswith("#encoding")orline.strip().startswith("#-*-"):
line_count+=1
#elifline.strip().startswith('"""')andline.strip().endswith('"""')andline.strip()!='"""':
#continue
#elifline.strip().startswith("'''")andline.strip().endswith("'''")andline.strip()!="'''":
#continue
elifline.strip().startswith('#'):
continue
elifline.strip().startswith("'''")andflag==True:
flag=False
continue
elifline.strip().startswith('"""')andflag==True:
flag=False
continue
else:
line_count+=1
returnline_count
defcount_code_lines(path,file_types=[]):
#判断路径是否存在
ifnotos.path.exists(path):
print("您输入的目录或文件路径不存在")
return0
line_count=0#代码行总数
file_lines_dict={}#每个文件代码行数
#判断是否为文件
ifos.path.isfile(path):
file_type=os.path.splitext(path)[1][1:]#取到文件后缀名
#判断文件类型是否满足条件
iflen(file_types)==0:
file_types=["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]
iffile_typeinfile_types:
line_count=count_file_lines(path)
returnline_count
else:
file_path=[]
forroot,dirs,filesinos.walk(path):
forfileinfiles:
file_path.append(os.path.join(root,file))
forfinfile_path:
file_type=os.path.splitext(f)[1][1:]
iflen(file_types)==0:
file_types=
["py","cpp","c","java","ruby","ini","go","html","css","js","txt","vbs","php","asp","sh"]
iffile_typenotinfile_types:
continue
line_num=count_file_lines(f)
line_count+=line_num
file_lines_dict[f]=line_num
returnline_count,file_lines_dict
if__name__=="__main__":
print(sys.argv)
iflen(sys.argv)<2:
print("请输入待统计行数的代码绝对路径!")
sys.exit()
count_path=sys.argv[1]
file_types=[]
iflen(sys.argv)>2:
foriinsys.argv[2:]:
file_types.append(i)
#print(count_path,file_types)
print(count_code_lines(count_path,file_types))
#print(count_file_lines("b.py"))
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。