YAML锚点引用后追加字符的方法及解析报错解决
问题原因
原生YAML语法不支持锚点引用后直接拼接字符串,你写的*apple , Pineapple不符合YAML语法规范:锚点引用*apple是独立的语法标记,后续直接跟逗号会被解析器识别为非法字符,因此抛出ParserError。
解决方案
方案1:Python侧拼接(推荐,无额外语法侵入)
先在YAML中将需要拼接的内容定义为序列,加载后用Python代码拼接为目标字符串:
- 修改Test.yml内容:
fruit : &apple Apple fruits : [*apple, Pineapple]
- 修改Python代码:
import yaml with open('Test.yml', 'r') as f: data = yaml.safe_load(f) # 拼接序列为目标字符串 data['fruits'] = ', '.join(data['fruits']) print(data['fruits'])
运行后即可输出Apple, Pineapple。
方案2:YAML自定义标签实现原生拼接
如果需要在YAML层面直接完成拼接,可以自定义YAML标签并注册构造器:
- 修改Test.yml内容:
fruit : &apple Apple fruits : !join [*apple, ", Pineapple"]
- 修改Python代码,注册自定义标签的处理逻辑:
import yaml def join_constructor(loader, node): seq = loader.construct_sequence(node) return ''.join(seq) # 注册自定义标签的构造器 yaml.add_constructor('!join', join_constructor) with open('Test.yml', 'r') as f: data = yaml.load(f, Loader=yaml.FullLoader) print(data['fruits'])
内容的提问来源于stack exchange,提问作者GYNB
相关产品推荐
相关产品推荐

