如何从纯 python 创建 yaml 文件?

Posted

技术标签:

【中文标题】如何从纯 python 创建 yaml 文件?【英文标题】:How can I create a yaml file from pure python? 【发布时间】:2012-02-26 11:05:10 【问题描述】:

来自Using YAML with Python的示例

原始 YAML 文件包含此内容

# tree format
treeroot:
    branch1:
        name: Node 1
        branch1-1:
            name: Node 1-1
    branch2:
        name: Node 2
        branch2-1:
            name: Node 2-1

使用 yaml.load() 从文件加载内容并将其转储到新的 YAML 文件后,我得到了这个:

# tree format
treeroot:
    branch1:
        branch1-1: name:Node 1-1
        name: Node 1
    branch2:
        branch2-1: name: Node 2-1
        name: Node 2

直接从纯 python 构建 YAML 文件的正确方法是什么?我不想自己写字符串。我想建立字典和列表。


部分...

dataMap = 'treeroot':
               'branch2': 
                 'branch1-1': 
                  'name': 'Node 1-1',   # should be its own level
                  'name': 'Node 1'
                 
               
          

【问题讨论】:

您是在问如何保证输出与输入相同的文件?如果是这样,则无法保证,因为字典没有预定义的顺序。 @Nate 对,这就是我的意图。我明白那个。我编辑并提供了部分结构。 Yaml 转储无法将内部 name: Node 1-1 解析到另一个级别.... 【参考方案1】:

好的。我只是仔细检查了文档。我们在yaml.dump(data, optional_args)的末尾需要这个

解决办法是这样的

yaml.dump(dataMap, f, default_flow_style=False)

其中 dataMap 是源 yaml.load(),f 是要写入的文件。

【讨论】:

这个转储不写#tree format评论。【参考方案2】:

假设您可能正在使用 PyYAML,那么您显示的输出是 not 复制粘贴 yaml.dump() 生成的内容,因为它包含评论,而 PyYAML 不会编写这些内容。

如果您想保留该注释,以及例如文件中的键顺序(当您将文件存储在修订控制系统中时很好),请使用 ¹:

import ruamel.yaml as yaml

yaml_str = """\
# tree format
treeroot:
    branch1:
        name: Node 1
        branch1-1:
            name: Node 1-1   # should be its own level
    branch2:
        name: Node 2
        branch2-1:
            name: Node 2-1
"""

data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader)
print yaml.dump(data, Dumper=yaml.RoundTripDumper, indent=4)

准确地为您提供输入:

# tree format
treeroot:
    branch1:
        name: Node 1
        branch1-1:
            name: Node 1-1   # should be its own level
    branch2:
        name: Node 2
        branch2-1:
            name: Node 2-1

¹ 这是使用 ruamel.yaml 完成的,我是 PyYAML 的增强版本。

【讨论】:

【参考方案3】:

您的第一个和第二个列表是等效的,只是符号不同。

请参阅:http://en.wikipedia.org/wiki/YAML#Associative_arrays 和 http://pyyaml.org/wiki/PyYAMLDocumentation#Dictionarieswithoutnestedcollectionsarenotdumpedcorrectly

【讨论】:

以上是关于如何从纯 python 创建 yaml 文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 spring boot + .yaml 创建配置文件?

Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架

Python语言+pytest框架+allure报告+log日志+yaml文件+mysql断言实现接口自动化框架

如何在 kubernetes 中使用 yaml 文件删除和重新创建 pod

Python3 - YAML文件的基本语法和简介

Python3 - YAML文件的基本语法和简介