如何在Python的PyYAML生成的YAML中添加{{- ... }}格式内容
解决PyYAML生成YAML时字符串带单引号的问题
当用PyYAML生成包含模板标记(如{{- something }})的YAML文件时,工具会自动给这类字符串添加单引号,导致输出不符合预期。以下是两种可行的解决方法:
方法1:自定义PyYAML的Dumper类
通过重写字符串表示逻辑,让包含模板标记的字符串以无引号形式输出:
import yaml class NoQuoteDumper(yaml.Dumper): def represent_str(self, data): # 检测字符串是否包含模板标记,是的话用无引号格式输出 if '{{-' in data: return self.represent_scalar('tag:yaml.org,2002:str', data, style='') return super().represent_str(data) # 测试数据 data = {"key": "{{- something }}"} # 生成YAML,关闭键排序避免顺序混乱 print(yaml.dump(data, Dumper=NoQuoteDumper, sort_keys=False))
执行后输出:
key: {{- something }}
方法2:使用ruamel.yaml(推荐)
ruamel.yaml对YAML 1.2标准支持更完善,能智能判断字符串是否需要添加引号,无需额外配置即可输出符合预期的内容:
- 先安装依赖:
pip install ruamel.yaml
- 编写代码:
from ruamel.yaml import YAML import sys yaml = YAML() yaml.default_flow_style = False # 启用块级输出 data = {"key": "{{- something }}"} yaml.dump(data, sys.stdout)
执行后直接输出无引号的目标格式:
key: {{- something }}
内容的提问来源于stack exchange,提问作者F. Balazs
相关产品推荐
相关产品推荐

