访问相对于导入的 python 模块的文件

Access files relative to imported python module

初步:

我在 Windows 10 上有 Anaconda 3,还有一个文件夹 folder_default,我已经放在 Python 路径上。我实际上不确定这是否是正确的术语,所以要清楚:无论我的 Python 脚本在哪里,如果我有一行代码说 import myFile,那行代码就会成功如果 myFile.pyfolder_default.

我的问题:

folder_default中,我有:

  1. 一个名为 useful_files 的子文件夹,其中包含一个名为 useful_file_1.txt.
  2. 的文本文件
  3. 一个名为 my_misc.py 的 python 脚本。

my_misc.py 有一行类似于:np.loadtxt('useful_files/useful_file_1.txt')。如果我在 folder_default 以外的 python 文件中使用 import my_script,则此行不起作用,因为 useful_files/useful_file_1.txt 不是相对于 python 的文件夹路径] 导入 my_misc.py 的文件。如果可以避免,我不想开始使用全局文件路径。

如何使用相对于导入的 python 模块而不是相对于导入该模块的 python 脚本的文件路径访问文件?

如果问题不清楚,请告诉我 - 我尝试编写一个假的、最小版本的安装程序,它实际上在我的计算机上,希望这样可以简化事情,但如果确实如此,我可以更改它事情更加混乱。

谢谢。

您可以使用 inspect 模块的 getfile 方法获取当前模块的路径,如 inspect.getfile(inspect.currentframe())。 例如:

# File : my_misc.py
import os, inspect

module_dir_path = os.path.dirname(os.path.abspath(inspect.getfile(inspect.currentframe()))) # get path to the directory of current module
useful_file_path = os.path.join(module_dir_path,'useful_files','useful_file_1.txt')
# path stored in useful_file_path. do whatever you want!

np.loadtxt(useful_file_path)