代码之家  ›  专栏  ›  技术社区  ›  Brandon Dube

鲁阿迈尔。yaml-缩进序列不工作?

  •  2
  • Brandon Dube  · 技术社区  · 8 年前

    MWE:

    import sys
    from ruamel.yaml import YAML
    yaml = YAML(typ='safe')
    yaml.default_flow_style = False
    yaml.indent(sequence=4, mapping=2, offset=2)
    d = {
        'name': 'asdf',
        'types': [
            1,
            2,
        ],
        'class': 1,
    }
    import sys
    yaml.dump(d, sys.stdout)
    >>>
    class: 1
    name: asdf
    types:
    - 1
    - 2
    

    我希望类型在 - 条目——为什么不是这样?文件相当稀少,而yaml。在这里,无论我尝试的值组合如何,缩进方法似乎都没有效果。。。

    py 3.6.4/winx64,ruamel 0.15.35

    1 回复  |  直到 8 年前
        1
  •  3
  •   Anthon    8 年前

    这不起作用的原因是因为您使用 typ='safe' 这给了你 SafeLoader() 这不支持序列和映射之间的缩进差异。它由(默认)往返加载器(它是“normal”的子类)提供 SafeLoader() )

    所以只要改变一下:

    yaml = YAML(typ='safe')
    

    yaml = YAML()
    

    yaml = YAML(typ='rt')
    

    如果你想往返于此 dict s和 list ,而不是保留注释 CommentedMap() CommentedList() 其中的子类,您可以执行以下操作:

    import sys
    import ruamel.yaml
    
    yaml_str = """\
    class: 1
    name: asdf
    types:
      - 1
      - 2
    """
    
    yamll = ruamel.yaml.YAML(typ='safe')
    yamld = ruamel.yaml.YAML()
    yamld.indent(mapping=4, sequence=4, offset=2)
    data = yamll.load(yaml_str)
    assert type(data) == dict
    yamld.dump(data, sys.stdout)
    
    推荐文章