簡體   English   中英

如何從純python創建一個yaml文件?

[英]How can I create a yaml file from pure python?

使用YAML和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'
                 }
               }
          }

好的。 我只是仔細檢查了文檔。 我們在yaml.dump(data, optional_args)的末尾需要這個

修復就是這個

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

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

假設您正在使用PyYAML,您顯示的輸出不是 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的增強版本,我是作者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM