20190227-做一个简易代码统计工具
2019-02-28 07:51:38来源:博客园 阅读 ()
做一个代码统计工具:
要求:
1.如果是文件,就直接统计文件行数,并打印结果
2.判断是否是目录,是就遍历统计目录下所有的文件
文件统计规则:
1.开头是#_*_或者#encoding的需要算作代码统计
2.注释#,'''或者"""判断某一行开头是"""或者'''就不计
3.空行不统计
4.统计当前文件行数,还有累计行数
要求算法:
1.判断是否是文件,且文件存在,则打开文件进行统计
2.判断是目录,则变量目录下所有的文件,进行统计
统计规则算法
1.注释种类有如下几种:
a.以#开头进行单行注释
#XXXXX
b.以三个双引号"""开头和结尾的单行注释
"""XXXXX"""
'''XXXXX'''
c.以三个双引号或者单引号开头换行进行注释格式如下:
""" XXXXX """
'''
XXX
'''
d.以三个双引号或者单引号开头不换行进行注释格式如下:
"""XXXXX """ '''XXXXX '''
e.以三个双引号或者单引号结尾不换行进行注释格式如下:
""" XXXXX""" ''' XXXXX'''
根据以上多行注释情况,考虑设置标志位,当标志位是True的时候统计代码,当标志位是False的时候不统计,注意考虑标志位还原的情况编写统计规则如下:
def coding_rule(filename): count = 0 import string with open(filename,'r',encoding ='utf-8') as fp: flag = True for line in fp: #print(line) if line.strip().startswith('#encoding') or line.strip().startswith('#_*_'): count+=1 #统计开头是#_*_或者#encoding的代码 elif not line.strip(): continue #如果是空行,则不计 elif line.strip().startswith('#'): #如果是单行注释格式如#xxx,则不统计,匹配a的情况 continue elif line.strip().startswith('"""') and line.strip().endswith('"""') and len(line.strip())>3: #如果是单行注释格式如"""xxx""",则不统计,匹配b的情况 continue elif line.strip().startswith("'''") and line.strip().endswith("'''") and len(line.strip())>3: continue #如果是单行注释格式如'''xxx''',则不统计,匹配b的情况 elif line.strip().startswith("'''") and len(line.strip())==3 and flag ==True: #如果是以三个单引号'''开始进行注释的,设置标志位为False,匹配c的情况 flag =False continue elif line.strip().startswith('"""') and len(line.strip())==3 and flag ==True: #如果是以三个双引号"""开始进行注释的,设置标志位为False,匹配c的情况 flag =False continue elif line.strip().startswith('"""') and not line.strip().endswith('"""'): #如果是三个双引号开头不换行进行注释,设置标志位为False,匹配d的情况 flag =False continue elif line.strip().startswith("'''") and not line.strip().endswith("'''"): #如果是三个单引号引号开头不换行进行注释,设置标志位为False,匹配d的情况 flag =False continue elif not line.strip().startswith('"""') and line.strip().endswith('"""'): #如果以三个双引号结尾不换行进行注释,还原标志位为True,匹配e的情况 flag =True elif not line.strip().startswith("'''") and line.strip().endswith("'''"): #如果以三个单引号结尾不换行进行注释,还原标志位为True,匹配e的情况 flag =True elif line.strip().startswith("'''") and len(line.strip())==3 and flag ==False: #如果是三个单引号引号开头不换行进行注释,还原标志位为True,匹配d的情况 flag =False flag =True elif line.strip().startswith('"""') and len(line.strip())==3 and flag ==False: #如果是三个单引号引号开头不换行进行注释,还原标志位为True,匹配d的情况 flag =False flag =True elif flag ==True: count+=1 #print(flag) #print(count) return count
另外写一个函数,来写代码统计的要求部分,如下:
def coding_count(*source_dir): import os result ={} total_count =0 except_file=[] for source in source_dir: if os.path.exists(source) and (source[-2:]=='py' or source[-3:]=='txt'): #如果文件存在,且是.py文件 result[source]=coding_rule(source) total_count +=coding_rule(source) #读文件 elif os.path.exists(source) and os.path.isdir(source): #如果输入的dir是一个目录,且存在 for root,dirs,files in os.walk(source): #print('当前目录:%s'%root) for file in files: file_dir = os.path.join(root,file) if os.path.basename(file)[-2:]=='py' or os.path.basename(file)[-3:]=='txt': try: result[file]=coding_rule(file_dir) total_count +=coding_rule(file_dir) except: except_file.append(file) result['total']=total_count return result,except_file #print(coding_count(r'C:\Users\何发奋\Desktop\Python 习题\a.txt',r'C:\Users\何发奋\Desktop\Python 习题\习题库')) print(coding_count(r'C:\Users\何发奋\Desktop\Python 习题\a.txt'))
原文链接:https://www.cnblogs.com/hyj691001/p/10447392.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- python3基础之“函数(2)” 2019-08-13
- Python3字典排序 2019-07-24
- 用python写一个简单的文件上传 2019-07-24
- Python random模块(以后用到一个再更新一个) 2019-07-24
- Python习题001 2019-07-24
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash