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

在Django中使用Pandas时遭遇FileNotFoundError问题求助

问题分析与解决方案

这个问题的核心原因是Django运行时的工作目录和你本地测试脚本时的工作目录不一样:

  • 本地直接运行tester.py时,脚本的工作目录就是它所在的文件夹,所以a.txt这个相对路径能正确找到文件;
  • 但当Django启动后,它的工作目录是项目的根目录(也就是manage.py所在的文件夹),而不是你的app目录(views.py和tester.py所在的地方),所以直接写a.txt会去项目根目录找,自然找不到。

解决步骤

1. 用绝对路径定位a.txt

在tester.py里,利用Python的__file__变量获取当前脚本的绝对路径,再拼接a.txt的路径,这样不管工作目录是什么,都能准确找到文件:

import pandas as pd
from sklearn.feature_extraction.text import CountVectorizer
from sklearn.naive_bayes import MultinomialNB
import os

# 获取当前脚本所在的绝对目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 拼接a.txt的完整路径
file_path = os.path.join(script_dir, 'a.txt')

# 用绝对路径读取文件
df = pd.read_table(file_path, sep='\t', header=None, names=['label', 'text'])

# 模型训练逻辑放在模块级别,仅执行一次
count_vector = CountVectorizer()
X = count_vector.fit_transform(df['text'])
y = df['label']

naive_bayes = MultinomialNB()
naive_bayes.fit(X, y)

def predictor(comment):
    tester = [comment]
    contest = count_vector.transform(tester)
    a = naive_bayes.predict(contest)
    return a[0]

2. 优化模型初始化逻辑(额外建议)

别把模型训练的代码放到predictor函数里,不然每次调用预测都会重新训练一遍模型,效率极低。像上面的代码那样,把模型训练放在模块级别,Django启动时只会执行一次,后续调用predictor直接用训练好的模型即可。

额外规范建议(可选)

如果a.txt是项目的静态数据文件,更规范的做法是在项目根目录创建一个data文件夹,把a.txt放进去,然后用Django的BASE_DIR来拼接路径:

首先在settings.py里你能看到BASE_DIR的定义:

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

然后在tester.py里可以这样引用:

from django.conf import settings

file_path = os.path.join(settings.BASE_DIR, 'data', 'a.txt')

这种方法适合数据文件需要统一管理的场景,能让项目结构更清晰。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:09:50