一个目录里面多个python程序文件,统计一下里面有多少行代码。即分别列出:代码、空行、注释的行数。
python代码实现:
import os,re
# 读取文件内容函数
def MyReadFile(path):
# 以读取模式打开文件
# 出现错误:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa2 in position 6: illegal multibyte sequence
# 解决方法:open() 函数中加上 encoding='UTF-8'
file = open(path, "r", encoding='UTF-8')
lines = file.readlines()
total_line = len(lines) # 总行数
note_line = 0 # 注释行数
blank_line = 0 # 空行数
# 遍历每一行
index = 0 # 遍历的初始位置标记
while index < total_line:
line = lines[index]
# 检查是否为注释
# 去掉左边空格 lstrip()
if line.startswith("#") or line.lstrip().startswith("#"):
note_line += 1
# 多行注释判断
# 正则表达式 判断开头是否为 多行注释开始
elif re.match("\s*'''", line) is not None:
# 多行注释本行结束
if re.match(".*'''$", line) is not None:
if re.match(".*'''$", line).span()[1] != 3:
note_line += 1
else:
note_line += 1
index += 1
line = lines[index]
# 判断下一行的结尾是否为 是空行还是注释行结尾
while re.match(".*'''$", line) is None:
line = lines[index]
note_line += 1
index += 1
# 检查是否为空行
elif line == '\n':
blank_line += 1
index += 1
print("文件:", path)
print("文件总行数为:", total_line, "行")
print("注释行数为:", note_line, "行")
print("空行数为:", blank_line, "行")
print()
# 读取路径下的文件
def MyReadPath(path):
# os.chdir() 改变当前工作目录到指定的路径
os.chdir(path)
# os.listdir() 返回指定的文件夹包含的文件或文件夹的名字的列表
# os.getcwd() 返回当前工作目录
files = os.listdir(os.getcwd())
for file in files:
# os.path.splitext(path) 分割路径,返回路径名和文件扩展名的元组
if os.path.splitext(file)[1] == '.py':
MyReadFile(file)
if __name__ == "__main__":
# 这里填写自己要读取的文件夹路径
MyReadPath("E:\pycharm\PycharmProjects\pythonLearn\Learn\shiyan2")
运行结果:
文件目录 | 运行结果 |
---|---|
总结:
从运行结果可以看出,运行后会读取给定目录下的.py文件,如果不是.py文件则不读取,文件路径下中有test.txt文件,但是不会读取它,只读取了两个.py结尾的文件。
该代码只是简单的判断了哪行是代码行、注释行和空行,如果一行代码中后面跟上注释,那么认为是代码行,多行注释中的空行判断是注释行。