删除目录中无扩展名文件触发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
相关产品推荐
相关产品推荐

