"""
统计代码行数
"""
import sys
import os
def count_file_line(path
):
"""统计文件的有效行数"""
countLine
= 0
flag
= True
try:
fp
= open(path
, "r", encoding
="utf-8")
encoding_type
= "utf-8"
fp
.close
()
except:
encoding_type
= "gbk"
with open(path
, "r", encoding
=encoding_type
) as fp
:
for line
in fp
:
if line
.strip
():
line
= line
.strip
()
if line
.endswith
('"""') and flag
== False:
flag
= True
continue
if line
.endswith
("'''") and flag
== False:
flag
= True
continue
if flag
== False:
continue
if line
.startswith
("#!") or line
.startswith
("#-*-") or line
.startswith
("# encoding"):
countLine
+= 1
elif line
.startswith
("#"):
continue
# 如果同时以
("'''")或者
('"""')开头或者结尾(比如:
"""aaa"""),那么不统计
elif line
.startswith
('"""') and line
.endswith
('"""') and line
!= '"""':
continue
elif line
.startswith
("'''") and line
.endswith
("'''") and line
!= "'''":
continue
")或者('"""'
)开头或者结尾(比如:aaa
"""或者"""bbb),那么不统计
elif line
.startswith
('"""') and flag
== True:
flag
= False
continue
elif line
.startswith
("'''") and flag
== True:
flag
= False
continue
else:
countLine
+= 1
return countLine
def count_codes(path
,file_types
=[]):
"""统计所有文件代码行"""
if not os
.path
.exists
(path
):
print("您输入的路径不存在!")
return 0
countTotalLine
= 0
file_paths
= {}
if os
.path
.isdir
(path
):
for root
,dirs
,files
in os
.walk
(path
):
for name
in files
:
if not file_types
:
file_types
= ["txt","py"]
if os
.path
.splitext
(name
)[1][1:] in file_types
:
file_path
= os
.path
.normpath
(os
.path
.join
(root
,name
))
file_lines
= count_file_line
(file_path
)
countTotalLine
+= file_lines
file_paths
[file_path
] = file_lines
else:
if not file_types
:
file_types
= ["txt","py"]
if os
.path
.splitext
(path
)[1][1:] in file_types
:
countTotalLine
= count_file_line
(path
)
file_paths
[path
] = count_file_line
(path
)
return countTotalLine
,file_paths
if __name__
== "__main__":
if len(sys
.argv
) < 2:
print("请输入路径!")
sys
.exit
()
path
= sys
.argv
[1]
file_types
= sys
.argv
[2:]
print(count_codes
(path
,file_types
))
转载请注明原文地址: https://www.6miu.com/read-5039084.html