Python递归函数值保留问题:修复es68函数计数重置Bug
解决递归统计指定扩展名文件数量的问题
原代码问题分析
- 递归调用未累加子目录计数:每次进入递归函数都会重新初始化
c=0,但调用子目录的递归函数后,没有将返回结果加到当前的c中,导致子目录的文件计数完全丢失。 - 扩展名判断逻辑不准确:用
estensioni in name会匹配文件名中任意位置包含该字符串的情况(比如test.txt.bak会被误判为.txt文件),无法精准匹配文件后缀。
修正后的代码
import os def es68(dir, estensioni): c = 0 for name in os.listdir(dir): if name.startswith('.'): continue pathname = os.path.join(dir, name) # 先判断是否为文件,再检查扩展名 if os.path.isfile(pathname): if os.path.splitext(name)[1] == estensioni: c += 1 # 若是目录,递归调用并累加子目录的计数结果 elif os.path.isdir(pathname): c += es68(pathname, estensioni) return c
关键修改说明
- 递归计数累加:将子目录递归调用的返回值
es68(pathname, estensioni)直接加到当前的c变量中,确保子目录的文件计数被汇总到总结果里。 - 精准匹配扩展名:使用
os.path.splitext(name)[1]获取文件的后缀名,再与目标扩展名做严格相等匹配,彻底避免误判情况。 - 调整判断顺序:先处理文件的扩展名检查,再处理目录的递归逻辑,代码逻辑更清晰直观。
内容的提问来源于stack exchange,提问作者mansto
相关产品推荐
相关产品推荐

