创建依赖于属性文件的子模块
Creating a submodule that relies on a properties file
我有以下结构
main.py
module/
properties.yaml
file.py
file.py相关代码:
def read_properties():
with open('properties.yaml') as file:
properties = yaml.load(file)
main.py相关代码:
from module import file
file.read_properties()
在 main.py 中调用 read_properties()
时,出现以下错误:FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'
即使在导入时也允许我的模块访问属性文件的推荐方法是什么?
提供 properties.yaml
的绝对路径:
with open('/Users/You/Some/Path/properties.yaml') as file:
正如JacobIRR在他的回答中所说,最好使用文件的绝对路径。我使用 os 模块来构造基于当前工作目录的绝对路径。所以对于你的代码,它会是这样的:
import os
working_directory = os.path.dirname(__file__)
properties_file = os.path.join(working_directory, 'module', 'properties.yaml')
基于@JacobIRR 和@BigGerman 的回答
我最终使用了 pathlib 而不是 os,但逻辑是一样的。
这是感兴趣的 os 的路径库语法:
在file.py中:
from pathlib import Path
properties_file = Path(__file__).resolve().parent/"properties.yaml"
with open(properties_file) as file:
properties = yaml.load(file)
我有以下结构
main.py
module/
properties.yaml
file.py
file.py相关代码:
def read_properties():
with open('properties.yaml') as file:
properties = yaml.load(file)
main.py相关代码:
from module import file
file.read_properties()
在 main.py 中调用 read_properties()
时,出现以下错误:FileNotFoundError: [Errno 2] No such file or directory: 'properties.yaml'
即使在导入时也允许我的模块访问属性文件的推荐方法是什么?
提供 properties.yaml
的绝对路径:
with open('/Users/You/Some/Path/properties.yaml') as file:
正如JacobIRR在他的回答中所说,最好使用文件的绝对路径。我使用 os 模块来构造基于当前工作目录的绝对路径。所以对于你的代码,它会是这样的:
import os
working_directory = os.path.dirname(__file__)
properties_file = os.path.join(working_directory, 'module', 'properties.yaml')
基于@JacobIRR 和@BigGerman 的回答
我最终使用了 pathlib 而不是 os,但逻辑是一样的。 这是感兴趣的 os 的路径库语法:
在file.py中:
from pathlib import Path
properties_file = Path(__file__).resolve().parent/"properties.yaml"
with open(properties_file) as file:
properties = yaml.load(file)