如何用Python的ruamel.yaml库编写Snowfakery所需的YAML配方文件
问题:生成符合Snowfakery要求的YAML文件格式错误
我想要编写一个可接收参数的Python脚本,将内容写入YAML文件以运行Snowfakery查询。Snowfakery要求文件前几行为带“-”的配方行,其余行无需该符号。
我尝试了如下代码:
snowfakeryTest = { "- snowfakery_version": 3, "- object": "obj", "fields":{ "name": "John doe" } } with open("simple.yml", 'w') as outfile: yaml_dump(snowfakeryTest, outfile,)
但生成的YAML文件格式始终不符合预期,请问该如何解决?
解决方案
问题根源是你用普通字典构造YAML结构,导致- snowfakery_version和- object被当作字典键,而非YAML列表项。Snowfakery配方文件的核心是列表包裹的配方对象,开头的-对应YAML列表元素,而非键名的一部分。
修改后的代码如下:
import yaml # 正确结构:列表包裹单个配方字典,键名不带"-" snowfakeryTest = [ { "snowfakery_version": 3, "object": "obj", "fields": { "name": "John doe" } } ] with open("simple.yml", 'w') as outfile: yaml.dump(snowfakeryTest, outfile, default_flow_style=False)
生成的符合要求的YAML内容:
- snowfakery_version: 3 object: obj fields: name: John doe
核心要点
- Snowfakery配方是YAML列表,每个列表项对应一个配方对象,因此Python中要用
list对应。 default_flow_style=False参数保证生成块级格式YAML,而非紧凑流式,契合Snowfakery的格式要求。- 如果需要动态传入参数,直接修改字典中的对应值即可(比如将
name替换为变量)。
内容的提问来源于stack exchange,提问作者Oliver Mills
相关产品推荐
相关产品推荐

