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

删除目录中无扩展名文件触发FileNotFoundError问题求助

错误原因分析
  • 条件判断完全错误:file != file.endswith(ex)是拿文件名(字符串)和endswith返回的布尔值做比较,两者永远不相等,导致这个条件永远为True,所有文件都会被执行删除操作。
  • 重复删除触发报错:循环遍历4个扩展名,每个扩展名都会执行一次删除逻辑。第一次删除后文件已不存在,后续循环再执行os.remove就会抛出FileNotFoundError。
  • 逻辑倒置:原本要删除的是不具备指定扩展名的文件,但当前逻辑完全搞反了。
修正后的代码
import os

def memeFilter():
    allowed_exts = {".jpeg", ".png", ".jpg", ".gif"}
    meme_dir = "memes"
    
    # 遍历目录下的所有条目
    for entry in os.listdir(meme_dir):
        entry_path = os.path.join(meme_dir, entry)
        # 只处理文件,跳过目录
        if os.path.isfile(entry_path):
            # 获取文件扩展名并转为小写,兼容大小写差异
            file_ext = os.path.splitext(entry)[1].lower()
            # 如果扩展名不在允许列表内,删除文件
            if file_ext not in allowed_exts:
                os.remove(entry_path)
代码优化说明
  • 用集合存储允许的扩展名,判断效率更高。
  • 用os.path.join拼接路径,避免不同操作系统的路径分隔符冲突。
  • 增加os.path.isfile判断,防止误删目录。
  • 将扩展名转为小写,兼容.JPG、.GIF这类大小写混合的文件名。

内容的提问来源于stack exchange,提问作者Matthew Titus

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 20:40:01