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

使用os.scandir遍历目录结构时触发FileNotFoundError的问题求助

解决os.chdir调用DirEntry对象导致的FileNotFoundError问题

我来帮你搞定这个报错!你遇到的问题核心在于对os.scandir()返回的DirEntry对象的用法理解有点偏差,咱们一步步拆解:

错误根源

os.scandir('data')返回的每个sub_folder都是DirEntry对象,而os.chdir()函数需要接收的是字符串类型的路径,直接把DirEntry对象传进去的话,Python会把它转换成类似<DirEntry 'run.0'>的字符串,这显然不是系统能识别的有效路径,所以才会抛出FileNotFoundError提示找不到data\\run.0。

快速修复方案

只需要调用DirEntry对象的path属性,就能拿到它对应的实际路径字符串,修改代码如下:

import os
for sub_folder in os.scandir('data'):
    # 先判断是否是目录,避免处理data下的文件
    if sub_folder.is_dir():
        os.chdir(sub_folder.path)  # 用path属性获取正确路径
        # 遍历当前子文件夹时,基于当前工作目录扫描
        for file in os.scandir(os.getcwd()):
            if file.name.endswith('params'):
                with open(file.name, 'r') as f:
                    data = f.read()
                    # 这里可以添加你的数据处理逻辑
        # 记得切回上级目录,避免后续循环出错
        os.chdir('..')

⚠️ 注意:切换目录后一定要记得切回上级目录,否则下一次循环的os.chdir(sub_folder.path)会基于当前子文件夹的路径去查找,大概率会再次报错。

更优的无切换目录方案

其实切换目录是个容易踩坑的操作,更健壮的写法是直接使用文件的完整路径,完全不需要切换目录:

import os
for sub_folder in os.scandir('data'):
    if sub_folder.is_dir():  # 确保只处理子文件夹
        # 遍历子文件夹下的所有文件,传入子文件夹的完整路径
        for file in os.scandir(sub_folder.path):
            if file.name.endswith('params'):
                # 用file.path直接获取文件的完整路径,打开文件
                with open(file.path, 'r') as f:
                    data = f.read()
                    # 这里添加你的数据处理逻辑,比如打印或存储数据
                    print(f"成功读取文件:{file.path}")

这种写法不仅避免了切换目录带来的潜在问题,代码逻辑也更清晰,后续维护起来更省心。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 18:18:10