解释这行代码from os import listdir from os.path import isdir, join notRepeatedLines = set() # 保存非重复的代码行 file_num, code_num = 0, 0 # 文件数量与代码总行数 def linesCount(directory): global file_num, code_num for filename in listdir(directory): temp = join(directory, filename) if isdir(temp): # 递归遍历子文件夹 linesCount(temp) elif temp.endswith('.cpp'): # 只考虑.cpp文件 file_num += 1 with open(temp, 'r', encoding='utf8') as fp: for line in fp: notRepeatedLines.add(line.strip()) code_num += 1 # 记录所有代码行 linesCount('F:\教学课件\计算机图形学') print('总行数:{0},非重复行数:{1}'.format(code_num, len(notRepeatedLines))) print('文件数量:{0}'.format(file_num))
时间: 2024-02-14 13:20:26 浏览: 136
解决os.path.isdir() 判断文件夹却返回false的问题
5星 · 资源好评率100%
这段代码的主要功能是统计某个文件夹下所有.cpp文件的代码行数和非重复行数。
1. `from os import listdir from os.path import isdir, join`
这行代码导入了os模块中的listdir函数和os.path模块中的isdir和join函数。
2. `notRepeatedLines = set()`
定义了一个集合用于保存非重复的代码行。
3. `file_num, code_num = 0, 0`
初始化文件数量和代码总行数为0。
4. `def linesCount(directory):`
定义了一个函数linesCount,用于递归遍历指定目录下的所有文件和子文件夹,并统计代码行数和非重复行数。
5. `global file_num, code_num`
在函数内部声明变量file_num和code_num为全局变量,以便在函数内部修改这些变量的值。
6. `for filename in listdir(directory):`
遍历指定目录下的所有文件和文件夹。
7. `temp = join(directory, filename)`
使用os.path.join函数拼接文件路径。
8. `if isdir(temp):`
如果当前文件是一个文件夹,则递归调用linesCount函数。
9. `elif temp.endswith('.cpp'):`
如果当前文件是一个.cpp文件,则进行代码行统计。
10. `file_num += 1`
文件数量加1。
11. `with open(temp, 'r', encoding='utf8') as fp:`
打开当前文件,并使用with语句自动关闭文件。
12. `for line in fp:`
遍历文件中的每一行。
13. `notRepeatedLines.add(line.strip())`
将当前行去除首尾空格后添加到非重复行集合中。
14. `code_num += 1`
代码总行数加1。
15. `linesCount('F:\教学课件\计算机图形学')`
调用函数linesCount,开始遍历指定目录下的所有文件和子文件夹。
16. `print('总行数:{0},非重复行数:{1}'.format(code_num, len(notRepeatedLines)))`
输出代码总行数和非重复行数。
17. `print('文件数量:{0}'.format(file_num))`
输出文件数量。
阅读全文