本文实例讲述了Python实现统计python文件中代码,注释及空白对应的行数。分享给大家供大家参考,具体如下:
其实代码和空白行很好统计,难点是注释行
python中的注释分为以#开头的单行注释
或者以'''开头以'''结尾 或以"""开头以"""结尾的文档注释,如:
1
2
3
4
5
|
'''
hello world
'''
|
和
1
2
3
|
'''
hello world'''
|
思路是用is_comment
记录是否存在多行注释,如果不存在,则判断当前行是否以'''开头,是则将is_comment
设为True,否则进行空行、当前行注释以及代码行的判断,如果is_comment
已经为True即,多行注释已经开始,则判断当前行是否以'''结尾,是则将is_comment
设为False,同时增加注释的行数。表示多行注释已经结束,反之继续,此时多行注释还未结束
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
# -*- coding:utf-8 -*-
#!python3
path = 'test.py'
with open (path, 'r' ,encoding = 'utf-8' ) as f:
code_lines = 0 #代码行数
comment_lines = 0 #注释行数
blank_lines = 0 #空白行数 内容为'\n',strip()后为''
is_comment = False
start_comment_index = 0 #记录以'''或"""开头的注释位置
for index,line in enumerate (f,start = 1 ):
line = line.strip() #去除开头和结尾的空白符
#判断多行注释是否已经开始
if not is_comment:
if line.startswith( "'''" ) or line.startswith( '"""'):
is_comment = True
start_comment_index = index
#单行注释
elif line.startswith('#'):
comment_lines += 1
#空白行
elif line == '':
blank_lines += 1
#代码行
else:
code_lines += 1
#多行注释已经开始
else:
if line.endswith("'''") or line.endswith('"" "'):
is_comment = False
comment_lines + = index - start_comment_index + 1
else :
pass
print ( "注释:%d" % comment_lines)
print ( "空行:%d" % blank_lines)
print ( "代码:%d" % code_lines)
|
运行结果:
注释:4
空行:2
代码:26
注:这里的Python测试文件test.py如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
# -*- coding:utf-8 -*-
#!python3
#九九乘法表
for i in range ( 1 , 10 ):
for j in range ( 1 , i + 1 ):
print ( "%d*%d=%d\t" % (j, i, i * j), end = "")
print ()
#斐波那契数列 0,1,1,2,3,5,8,...
num = int ( input ( "需要几项?" ))
n1 = 0
n2 = 1
count = 2
if num< = 0 :
print ( "请输入一个整数。" )
elif num = = 1 :
print ( "斐波那契数列:" )
print (n1)
elif num = = 2 :
print ( "斐波那契数列:" )
print (n1, "," ,n2)
else :
print ( "斐波那契数列:" )
print (n1, "," ,n2,end = " , " )
while count<num:
sum = n1 + n2
print ( sum ,end = " , " )
n1 = n2
n2 = sum
count + = 1
print ()
|
感兴趣的朋友可以自己测试一下~
希望本文所述对大家Python程序设计有所帮助。
原文链接:http://www.cnblogs.com/hupeng1234/p/6680230.html