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

Python脚本字典映射文件时出现OSError: file not found问题求助

问题排查与修复方案

嘿,我帮你找出问题根源了,主要有两个关键点需要修正:

1. 字典里只存了文件名,没存完整路径

你用os.listdir('./texto')获取的是目标文件夹里的纯文件名(比如dsc_hydra1.txt),然后直接把这个名字存在了字典dsc里。但当后续np.loadtxt尝试打开这个文件时,Python会在脚本当前的工作目录(不是./texto文件夹)里查找,所以哪怕文件确实在./texto,当前目录找不到就会触发OSError。

2. 字典的Key设置可能有误

看你代码里写的dsc[filename[:6]] = filename,如果你的文件名是dsc_hydra1.txt,filename[:6]取的是前6个字符dsc_hy,但你后续却用dsc['dsc_hydra1']来取值——这理论上应该先报KeyError才对。如果你的print(dsc['dsc_hydra1'])能正常运行,说明你大概率写错了Key的截取逻辑,应该是要取不带.txt后缀的文件名(比如dsc_hydra1)作为Key。


推荐修复方案:存储完整绝对路径 + 修正Key逻辑

修改代码,把文件的完整绝对路径存入字典,同时修正Key的生成方式,确保后续能正确取值:

import os
import fnmatch

dsc = {}
# 先拿到目标文件夹的绝对路径,避免相对路径的不确定性
texto_folder = os.path.abspath('./texto')

for filename in os.listdir(texto_folder):
    if fnmatch.fnmatch(filename, 'dsc_hydra*.txt'):
        # 生成正确的Key:去掉.txt后缀的文件名
        file_key = os.path.splitext(filename)[0]  # 比如从dsc_hydra1.txt得到dsc_hydra1
        # 拼接完整的绝对路径
        full_file_path = os.path.join(texto_folder, filename)
        dsc[file_key] = full_file_path

# 验证输出
print(dsc)
print(dsc['dsc_hydra1'])  # 现在能正确取到完整路径了

这样后续调用函数时,传递的是完整路径,np.loadtxt就能准确找到文件了:

IFOV = gi.IFOV_generic(gmatOUTsat1, matrixINPUTsat1, dsc['dsc_hydra1'], 'ifovfileMST.json', k_lim, height, width)

另一种可选方案:切换工作目录到目标文件夹

如果你不想修改路径存储逻辑,可以在遍历文件前先切换工作目录到./texto,这样后续使用文件名就能直接找到文件:

import os
import fnmatch

# 切换工作目录到texto文件夹
os.chdir('./texto')

dsc = {}
for filename in os.listdir('.'):
    if fnmatch.fnmatch(filename, 'dsc_hydra*.txt'):
        file_key = os.path.splitext(filename)[0]
        dsc[file_key] = filename

# 后续代码保持不变即可

⚠️ 注意:这种方式会改变脚本的当前工作目录,如果你的脚本后续还要访问其他目录的文件,需要格外注意路径的正确性,所以更推荐第一种存储完整路径的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 09:17:23