如何在YAML别名中追加字符串?JSON能否满足该需求?
问题解答
1. YAML别名能否直接追加字符串?
原生YAML的锚点(&)和引用(*)机制仅支持直接复用锚点的完整值,不支持在引用时直接追加字符串。你写的*root_directory + ".barsrc"属于无效YAML语法,解析器会直接报错。
要实现路径拼接的需求,有两种可行方案:
- 自定义YAML标签:借助Python的
yaml模块自定义构造器,比如定义!join标签处理字符串拼接。示例如下:
YAML文件内容:
对应Python代码:item: &root_directory "/home/pritam/" barsrc_file: !join [*root_directory, ".barsrc"] zshrc_file: !join [*root_directory, ".zshrc"]import yaml def join_constructor(loader, node): parts = loader.construct_sequence(node) return ''.join(parts) yaml.SafeLoader.add_constructor('!join', join_constructor) with open('config.yaml') as file: data = yaml.safe_load(file) print(f"barsrc_file: {data['barsrc_file']}") # 输出: /home/pritam/.barsrc - 加载后在Python中拼接:先加载YAML里的根路径,再在代码里手动拼接后缀:
import yaml with open('config.yaml') as file: data = yaml.safe_load(file) root_dir = data['item'] data['barsrc_file'] = root_dir + ".barsrc" data['zshrc_file'] = root_dir + ".zshrc"
2. JSON能否满足变量追加字符串的需求?
原生JSON不支持变量引用、锚点或字符串插值功能,它只是纯静态数据格式,无法在JSON文件内部实现变量追加字符串的逻辑。
要实现类似需求,只能在解析JSON文件后,用代码手动完成字符串拼接。例如:
JSON文件内容:
{ "root_directory": "/home/pritam/", "barsrc_suffix": ".barsrc", "zshrc_suffix": ".zshrc" }
Python处理代码:
import json with open('config.json') as file: data = json.load(file) root_dir = data['root_directory'] data['barsrc_file'] = root_dir + data['barsrc_suffix'] data['zshrc_file'] = root_dir + data['zshrc_suffix']
内容的提问来源于stack exchange,提问作者Pritam
相关产品推荐
相关产品推荐

