簡體   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