制作“始终相对于当前模块”的文件路径?

时间:2012-04-16 12:37:12

标签: python module path relative

假设您有一个包含

的模块
myfile = open('test.txt', 'r')

'test.txt'文件位于同一个文件夹中。如果您将运行该模块,该文件将成功打开。 现在假设您从另一个文件夹中导入该模块。不会在与该代码所在的模块相同的文件夹中搜索该文件。 那么如何让模块首先在同一个文件夹中搜索相对路径的文件呢? 使用“__file__”或“os.getcwd()”有各种解决方案,但我希望有一种更简洁的方法,就像传递给open()或file()的字符串中的相同特殊字符一样。

2 个答案:

答案 0 :(得分:44)

解决方案是使用__file__并且非常干净:

import os

TEST_FILENAME = os.path.join(os.path.dirname(__file__), 'test.txt')

答案 1 :(得分:5)

对于从.py文件加载的普通模块,__file__应该存在并且可以使用。要将信息从__file__连接到您的相对路径,自2014年以来提供了比os.path界面更新的选项:

from pathlib import Path

here = Path(__file__).parent
with (here/'test.txt').open() as myfile:
    ...

pathlib已在3.4中添加到Python-请参见PEP428。对于仍使用Python 2.7并希望使用相同API的用户,请使用backport is available

有兴趣应用现有最现代方法的用户应考虑移至importlib-resources,而不是相对于源树加入数据文件。当前,很少有用户愿意将兼容性仅限制在Python 3.7+上,因此,我谨此提倡那些对尖端技术感兴趣的人。