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

Python运行报File not found 如何读取脚本同目录下的资源文件

问题根因

Python中代码里写的裸相对路径,默认参照的是执行脚本时终端的工作目录,不是.py脚本文件自身的存放目录。
你训练脚本能正常读取文件,只是因为运行训练脚本时终端刚好处于脚本所在文件夹;运行主脚本时工作目录不在脚本文件夹下,就会触发File not found报错。

修复方案

不需要写死绝对路径,只要在代码里先获取当前脚本自身所在的绝对目录,再拼接目标文件名即可,不管项目拷到哪台电脑、从哪个路径启动脚本都能正常加载资源,完全满足作业提交、现场演示的需求。

具体修改步骤

  • 在主脚本的导入区域新增os模块导入
  • 定义脚本所在目录的常量
  • 把所有文件加载的路径都改为基于该常量拼接的路径
  • 修正主脚本里存在的缩进语法错误

修改后可直接使用的核心代码

首先在导入部分新增:

import os

在初始化lemmatizer之后、加载文件之前新增:

# 获取当前主脚本自身所在的文件夹绝对路径
BASE_DIR = os.path.dirname(os.path.abspath(__file__))

把原来的4行文件加载代码替换为:

intentii = json.loads(open(os.path.join(BASE_DIR, 'intentii.json'), 'r', encoding='utf-8').read())
cuvinte = pickle.load(open(os.path.join(BASE_DIR, 'cuvinte.pkl'), 'rb'))
clase = pickle.load(open(os.path.join(BASE_DIR, 'clase.pkl'), 'rb'))
model = load_model(os.path.join(BASE_DIR, 'chatbotmodel.h5'))
额外语法错误修正

你贴的主脚本里pachet_de_cuvinte函数存在缩进错误:

def pachet_de_cuvinte(sentence):
    sentence_cuvinte = clean_up_sentence(sentence)
    pachet = [0] * len(cuvinte)
        # 下一行前面多了4个空格,缩进不匹配,要删掉多余空格和上一行保持同级
        for w in sentence_cuvinte:
        for i, cuvant in enumerate(cuvinte):
            if cuvant == w:
                pachet[i] = 1
    return np.array(pachet)

把for w in sentence_cuvinte:前面多余的缩进删掉,否则运行时会直接报IndentationError语法错误。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 13:45:34