【发布时间】:2020-12-24 22:40:08
【问题描述】:
我正在使用 yaml 和 pyyaml 来配置我的应用程序。
可以这样配置吗-
config.yml -
root:
repo_root: /home/raghhuveer/code/data_science/papers/cv/AlexNet_lght
data_root: $root.repo_root/data
service:
root: $root.data_root/csv/xyz.csv
yaml加载功能-
def load_config(config_path):
config_path = os.path.abspath(config_path)
if not os.path.isfile(config_path):
raise FileNotFoundError("{} does not exist".format(config_path))
else:
with open(config_path) as f:
config = yaml.load(f, Loader=yaml.SafeLoader)
# logging.info(config)
logging.info("Config used for run - \n{}".format(yaml.dump(config, sort_keys=False)))
return DotDict(config)
电流输出-
root:
repo_root: /home/raghhuveer/code/data_science/papers/cv/AlexNet_lght
data_root: ${root.repo_root}/data
service:
root: ${root.data_root}/csv/xyz.csv
所需的输出 -
root:
repo_root: /home/raghhuveer/code/data_science/papers/cv/AlexNet_lght
data_root: /home/raghhuveer/code/data_science/papers/cv/AlexNet_lght/data
service:
root: /home/raghhuveer/code/data_science/papers/cv/AlexNet_lght/data/csv/xyz.csv
这甚至可以用 python 实现吗?如果是这样,任何帮助都会非常好。
提前致谢。
【问题讨论】:
-
不错的任务。我看不出为什么这是不可能的。你自己尝试过什么吗?真实的结构是什么样的(结构有多“深”)?变量总是“顶级”键吗?请提供更具体的信息,以便更轻松地回答
-
一些帮助您入门的想法:您可以使用 template strings 并自己构建变量字符串,或者您可以使用正则表达式。
-
@Wups 我是一个 yaml 配置的初学者,你的评论让我无法理解。你能帮我把它变笨吗?
-
@JanStránský 我已经编辑了问题以显示我当前的方法。这是我想要保留 yaml 的深度