假设您有一个包含
的模块myfile = open('test.txt', 'r')
'test.txt'文件位于同一个文件夹中。如果您将运行该模块,该文件将成功打开。
现在假设您从另一个文件夹中导入该模块。不会在与该代码所在的模块相同的文件夹中搜索该文件。
那么如何让模块首先在同一个文件夹中搜索相对路径的文件呢?
使用“__file__
”或“os.getcwd()
”有各种解决方案,但我希望有一种更简洁的方法,就像传递给open()或file()的字符串中的相同特殊字符一样。
答案 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+上,因此,我谨此提倡那些对尖端技术感兴趣的人。