如何使用python从调用子目录的其他目录导入文件?

如何使用python从调用子目录的其他目录导入文件?,python,Python,以下是目录映射: home |--main.py |files |-----data |-----data.py |-----day |-----001.csv |-----main |-----main.py data.py have函数将在一天内调用一些文件作为子目录,例如001.csv 我想在data.py中调用这个函数 首先我使用 import os, sy

以下是目录映射:

home
 |--main.py
 |files
    |-----data
            |-----data.py
            |-----day
                   |-----001.csv
    |-----main
            |-----main.py
data.py have函数将在一天内调用一些文件作为子目录,例如001.csv

我想在data.py中调用这个函数

首先我使用

import os, sys
lib_path = os.path.abspath('../data')
sys.path.append(lib_path)

from data import get_rt_data
现在我可以使用我导入的get\u rt\u数据

但它仍然有错误:

OSError: File 'day/001.csv' does not exist
我知道,因为我的main.py不知道001.csv在哪里

但我不知道如何修复它

我知道,因为我的main.py不知道001.csv在哪里

你说得对。所以您需要做的是告诉main.py它在哪里。有几种方法可以做到这一点。最简单也是最好的方法是向试图读取day/001.csv的代码传递一个绝对路径。与当前使用day/001.csv执行的操作不同,只需使用os.path.joinlib_path,day/001.csv即可。然后您已经给出了文件的绝对路径,您的程序将知道在哪里可以找到它

这有点滥用lib_path的语义,因为您也在使用它来读取数据,但这似乎符合您设置目录的方式。只需将lib_path重命名为更精确的名称(如data_path),就可以解决语义问题


还有很多其他方法可以做到这一点。想到的一个想法是使用os.chdirlib_path来更改进程的当前工作目录。然后,您就可以像以前一样打开day/001.csv了。但是,我建议不要这样做,因为更改工作目录将更改任何其他相对路径,并且从您描述的一点开始,您不希望更改可执行文件的工作位置;您只需要为它提供csv文件的完整路径。001.csv的绝对路径是正确的选择。

os.chdirlib\u路径!!!非常感谢您的解答和解释。