访问相对于导入的 python 模块的文件
Access files relative to imported python module
初步:
我在 Windows 10 上有 Anaconda 3,还有一个文件夹 folder_default
,我已经放在 Python 路径上。我实际上不确定这是否是正确的术语,所以要清楚:无论我的 Python 脚本在哪里,如果我有一行代码说 import myFile
,那行代码就会成功如果 myFile.py
在 folder_default
.
我的问题:
在folder_default
中,我有:
- 一个名为
useful_files
的子文件夹,其中包含一个名为 useful_file_1.txt
. 的文本文件
- 一个名为
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)
初步:
我在 Windows 10 上有 Anaconda 3,还有一个文件夹 folder_default
,我已经放在 Python 路径上。我实际上不确定这是否是正确的术语,所以要清楚:无论我的 Python 脚本在哪里,如果我有一行代码说 import myFile
,那行代码就会成功如果 myFile.py
在 folder_default
.
我的问题:
在folder_default
中,我有:
- 一个名为
useful_files
的子文件夹,其中包含一个名为useful_file_1.txt
. 的文本文件
- 一个名为
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)