繁体   English   中英

使用ruamel.yaml在加载/转储YAML上保留锚点和别名

[英]Keep anchors & aliases on load/dump YAML using ruamel.yaml

使用yaml.load时,如何避免ruamel.yaml合并锚点? 我想按原样保留文件,只需修改一些键,例如production -> hostproduction -> port并转储到文件

defaults: &defaults
  host: <%= ENV.fetch("VBOX_IP", "127.0.0.1") %>
  adapter: mysql2
  reconnect: true
  encoding: utf8
  username: root

production:
  default:
    <<: *defaults
    host: dbname.domain.com
    port: 3306

如果文件config.yaml有该YAML示例,则可以执行以下操作:

import sys
import ruamel.yaml


yaml = ruamel.yaml.YAML()

with open('config.yaml') as ifp:
    data = yaml.load(ifp)
data['defaults']['reconnect'] = False
data['production']['default']['port'] += 1

with open('config.yaml', 'w') as ofp:
    yaml.dump(data, ofp)

获取更新的文件:

defaults: &defaults
  host: <%= ENV.fetch("VBOX_IP", "127.0.0.1") %>
  adapter: mysql2
  reconnect: false
  encoding: utf8
  username: root

production:
  default:
    <<: *defaults
    host: dbname.domain.com
    port: 3307

默认的YAML() (相当于YAML(typ='rt') )将为您提供保留了锚名称和合并键( << )的往返加载程序/转储程序。

请注意,如果您愿意:

data['production']['default']['reconnect'] = 'False'

然后将reconnect密钥添加到以合并密钥开头的映射中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM