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
相关产品推荐
相关产品推荐

