调用py文件的Python Sys路径

时间:2018-12-14 11:16:12

标签: python csv

当我单独运行Forecast.py文件时,它会找到并读取data.csv文件。但是通过从另一个文件路径中的asd.py文件运行predict.py文件而失败;

我的文件

-sbin
  -master
    +asd.py
-scripts
  -bash
    -dataset
      +data.csv
    +predict.py

asd.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()

predict.py

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

3 个答案:

答案 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。

在您的情况下,我将尝试将该路径以某种方式传递给第二个脚本。