如何创建“始终相对于当前模块”的文件路径?[重复]
- 2025-03-10 08:52:00
- admin 原创
- 47
问题描述:
假设你有一个模块,其中包含
myfile = open('test.txt', 'r')
并且“test.txt”文件位于同一文件夹中。如果您运行该模块,则该文件将成功打开。
现在,假设您从另一个文件夹中的另一个模块导入该模块。该文件将不会在该代码所在的模块所在的文件夹中进行搜索。
那么如何让模块首先在同一个文件夹中搜索具有相对路径的文件呢?
__file__
使用“ ”或“ ”有多种解决方案os.getcwd()
,但我希望有一种更简洁的方法,例如在传递给 open() 或 file() 的字符串中使用相同的特殊字符。
解决方案 1:
解决方案是使用__file__
并且它非常干净:
import os
TEST_FILENAME = os.path.join(os.path.dirname(__file__), 'test.txt')
解决方案 2:
对于从文件加载的普通模块.py
,__file__
应该存在且可用。要将信息添加到__file__
您的相对路径中,自 2014 年以来,有一个比os.path
接口更新的选项:
from pathlib import Path
here = Path(__file__).parent
fname = here / "test.txt"
with fname.open() as f:
...
pathlib
在 Python 3.4 版中被添加 - 参见PEP428。对于仍在使用 Python 2.7 并希望使用相同 API 的用户,可以使用反向移植。
请注意,当您使用 Python 包时,有更好的方法可用于读取资源 - 您可以考虑转向importlib-resources。这需要 Python 3.7+,对于旧版本,您可以使用pkgutil
。正确打包资源而不是相对于源树连接数据文件的一个优点是,即使代码未在文件系统上提取(例如 zip 文件中的包),代码仍将有效。有关在包中读取/写入数据文件的更多详细信息,请参阅如何从 Python 包内部读取(静态)文件? 。
相关推荐
热门文章
项目管理软件有哪些?
热门标签
云禅道AD