|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
from pathlib import Path
def get_files(p,files):
for each in p.iterdir():
if str(each) == __file__: #__file__显示本文件所在的路径
continue
if each.is_file() and each.suffix == '.py':
files.append(each)
if each.is_dir():
p = each
get_files(p,files)
return files
def count_lines(files):
lines = 0
for each in files:
with open(each,"r",errors="ignore") as f:
t = f.readlines()
lines += len(t) - t.count("\n")#减去空行,查找只有\n元素数量
return lines
p = Path.cwd()
files = []
files = get_files(p,files)
print(f"一共有{count_lines(files)}行代码")
有大佬解释一下 if str(each) == __file__: #__file__ continue 这个意思不是当变量each等于本代码路径是就会跳过本源代码文件吗?
那为什么我在本文件中增加代码 最后输出的结果也会跟着变动呢?
__file__ 是一个内置变量,它包含了当前执行的脚本的文件名。在给定的代码中, if str(each) == __file__ 这行代码的意思是,如果当前遍历到的文件路径等于当前执行的脚本文件的路径,就跳过这个文件,不对其进行处理。
然而,问题出在递归调用 get_files 函数时,当遍历到子目录时, p 被更新为子目录的路径,这样会影响到 __file__ 的比较结果。因为 __file__ 是指向最初执行的脚本文件的路径,而不是当前正在遍历的文件的路径。
解决这个问题的方法是不要在递归调用中改变 p 的值,而是创建一个新的变量来保存子目录的路径,这样就不会影响到 __file__ 的比较结果。
|
|