码迷,mamicode.com
首页 > 其他好文 > 详细

统计代码文件中的实际有效行数,去掉空行、单行注释、多行注释

时间:2018-12-27 20:15:03      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:enc   main   strip   ext   去掉   style   lin   cep   line   

#coding=gbk

import os

#rootdir=‘f:\\pylianxi‘
def count_line_core(file_name):  ##传入单个文件,统计行数,之后返回该文件的实际代码行数;区分utf-8、gbk有待优化
    print(core_file_name:,file_name)
    lines_count=0
    flag=True
    try:
        with open(file_name,r,encoding=gbk) as fp:
            print(gbk file_name:,file_name)
            for i in fp:
                i=i.strip()
                if i=="‘‘‘" or i==""":
                    if flag==True:
                        flag=False
                        continue
                    else:
                        flag=True
                        continue
                elif (i.startswith("‘‘‘") and i.endswith("‘‘‘")) or (i.startswith(""") and i.endswith(""")):
                    continue
                elif i.startswith("‘‘‘") or i.startswith(""") or i.endswith("‘‘‘") or i.endswith("""):
                    if flag==True:
                        flag=False
                        continue
                    else:
                        flag=True
                        continue
                if flag==True and i!=‘‘ and not i.startswith(#):
                    lines_count+=1
                    #print(i)
                if i.startswith(#-*-) or i.startswith(#coding) or i.startswith(#encoding):
                    lines_count+=1
                    #print(i)
    except:
        with open(file_name,r,encoding=utf-8) as fp:
            print(utf-8 file_name:,file_name)
            for i in fp:
                i=i.strip()
                if i=="‘‘‘" or i==""":
                    if flag==True:
                        flag=False
                        continue
                    else:
                        flag=True
                        continue
                elif (i.startswith("‘‘‘") and i.endswith("‘‘‘")) or (i.startswith(""") and i.endswith(""")):
                    continue
                elif i.startswith("‘‘‘") or i.startswith(""") or i.endswith("‘‘‘") or i.endswith("""):
                    if flag==True:
                        flag=False
                        continue
                    else:
                        flag=True
                        continue
                if flag==True and i!=‘‘ and not i.startswith(#):
                    lines_count+=1
                    #print(i)
                if i.startswith(#-*-) or i.startswith(#coding) or i.startswith(#encoding):
                    lines_count+=1
                    #print(i)
    return lines_count    

def code_line_count(rootdir,filetype):  ##分别处理了传入的路径是单个文件,或者传入的是文件夹
    #rootdir 传的是单个文件
    count_dict={}
    if os.path.isfile(rootdir) and os.path.splitext(rootdir)[1] in filetype:
        file_name=rootdir
        lines_count=count_line_core(file_name)
        return lines_count

    elif os.path.isdir(rootdir):
        for files in os.listdir(rootdir):
            file_name=os.path.join(rootdir,files)
            
            if os.path.splitext(file_name)[1] in filetype:
                print(file_name,file_name)
                lines_count=count_line_core(file_name)
                count_dict[files]=lines_count
                
        sum_1=sum(count_dict.values())
        
        return sum_1,count_dict
            

import sys

if __name__==__main__:
    if len(sys.argv)<3:
        print(参数数量不对,请输入要统计代码行数的文件路径及文件类型,如.txt .py等!)
        sys.exit()
    if os.path.exists(sys.argv[1]):
        if os.path.isfile(sys.argv[1]):
            print(该文件的代码行数为:,code_line_count(sys.argv[1],sys.argv[2:]))
            
        elif os.path.isdir(sys.argv[1]):
            print(sys.argv[1],sys.argv[2:],sys.argv[1],sys.argv[2:])
            result=code_line_count(sys.argv[1],sys.argv[2:])
            print(总代码行数为:%s,每个文件代码行数为:%s%result)
            #for i in result[1]:
            print(**20)
            print(sorted(result[1].items(),key=lambda x:x[1]))
                
                

    else:
        print(输入的路径不存在,请重新输入!)
        sys.exit()

 

统计代码文件中的实际有效行数,去掉空行、单行注释、多行注释

标签:enc   main   strip   ext   去掉   style   lin   cep   line   

原文地址:https://www.cnblogs.com/xiaoxiao075/p/10186834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!