Python遍历文件夹仅识别最后一个文件扩展名的bug修复求助
代码修复方案
问题根源
原代码遍历目录下所有文件时,fext变量会被每一轮循环的当前文件扩展名覆盖,遍历结束后仅保留最后一个文件的扩展名,因此只要最后一个文件的扩展名不匹配,就算目录下存在对应后缀的文件也会触发报错。
优化逻辑
- 遍历目录阶段收集所有文件的扩展名存入集合,自动去重,查询效率更高
- 扩展名统一转小写存储,用户输入也同步转小写校验,兼容
JPG/jpg这类大小写差异场景 - 过滤无扩展名的无效文件,避免干扰判断
优化后代码
import os from os.path import join file_path = input("请输入文件夹路径: ") print("") TF = False # 存储目录下所有出现过的扩展名(不带点,小写格式) all_exts = set() path_it = (join(root, filename) for root, _, filenames in os.walk(file_path) for filename in filenames) for path in path_it: fext = os.path.splitext(os.path.basename(path))[1] # 去掉扩展名前的点,转小写后存入集合 ext_name = fext.lstrip('.').lower() if ext_name: all_exts.add(ext_name) fname = os.path.splitext(os.path.basename(path))[0] while True: file_type = input("请输入文件扩展名(例如 txt, wav, jpg, gpx, pdf): ").strip().lower() print(file_type) if file_type in all_exts: TF = True break else: print(f"\n*** 该文件夹下没有后缀为 '{file_type}' 的文件,请重新输入。\n") # 其余业务代码
改动说明
- 移除了原代码中未使用的
string、isfile导入 - 新增
all_exts集合统一存储所有扩展名,避免单变量覆盖问题 - 增加大小写兼容逻辑,降低用户输入门槛
- 优化了提示文案为中文,使用f-string简化字符串拼接逻辑
内容的提问来源于stack exchange,提问作者Kieran T
相关产品推荐
相关产品推荐

