You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:24:10