当我单独运行Forecast.py文件时,它会找到并读取data.csv文件。但是通过从另一个文件路径中的asd.py文件运行predict.py文件而失败;
-sbin
-master
+asd.py
-scripts
-bash
-dataset
+data.csv
+predict.py
import os
import sys
runPath = os.path.dirname(os.path.realpath(__file__))
sys.path.append(os.path.join(runPath, "../../scripts/bash"))
from predict import pred
pred().main()
import pandas as pd
class pred:
def main(self):
data = pd.read_csv('dataset/data.csv', sep=';')
此错误的原因可能是由于更改操作路径引起的吗?还是因为另一个错误我没有得到它。
FileNotFoundError: File b'dataset/data.csv' does not exist
答案 0 :(得分:1)
我认为您应该使用绝对路径,而不是相对路径
答案 1 :(得分:1)
以上评论的答案更长: 发生这种情况的原因是,尽管您将scripts文件夹追加到sys路径中,以便从predict.py导入内容,但是每当您在asd.py中调用该代码时,它将在调用脚本的(asd.py)当前工作目录中运行。 / p>
这对您来说意味着相对路径dataset / dataset.csv在asd.py(sbin / master)的当前工作目录中不存在,因此代码将引发FileNotFound异常。
要解决此问题并能够在任何地方运行代码的方法是为预报。py提供数据集文件的绝对路径。
要以非硬编码的方式执行此操作,我将按照您获取runPath的方式进行操作,即获取变量中的predict.py文件的绝对路径,然后使用os.path.join将其连接到数据集文件。这样,您始终可以确保无论调用脚本使用了predict.py中的代码,都可以找到数据集文件。
以下示例:
predict.py
import pandas as pd
import os
current_dir = os.path.dirname(os.path.realpath(__file__))
class pred:
def main(self):
data_fullpath = os.path.join(current_dir, 'dataset/dataset.csv')
data = pd.read_csv(data_fullpath, sep=';')
答案 2 :(得分:0)
sys.path文档说:
指定模块搜索路径的字符串列表
所以我不希望相对路径从您在asd.py中设置的路径开始 该脚本试图从启动脚本的当前文件夹开始打开dataset / data.csv。
在您的情况下,我将尝试将该路径以某种方式传递给第二个脚本。