Python 保持稳定,;使用ruamel.YAML加载/卸载YAML时的别名
使用yaml.load时,如何避免Python 保持稳定,;使用ruamel.YAML加载/卸载YAML时的别名,python,python-2.7,pyyaml,ruamel.yaml,Python,Python 2.7,Pyyaml,Ruamel.yaml,使用yaml.load时,如何避免ruamel.yaml合并锚? 我想保持文件原样,只需修改一些键,如生产->主机&生产->端口,然后转储到文件 defaults: &defaults host: <%= ENV.fetch("VBOX_IP", "127.0.0.1") %> adapter: mysql2 reconnect: true encoding: utf8 username: root production: default:
ruamel.yaml
合并锚?
我想保持文件原样,只需修改一些键,如生产->主机
&生产->端口
,然后转储到文件
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
defaults:&defaults
主持人:
适配器:mysql2
重新连接:正确
编码:utf8
用户名:root
制作:
违约:
如果文件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
然后,重新连接
键将添加到以合并键开始的映射中。感谢您的详细回答。我在我的脚本中发现了一个错误,它设置了任何导致不想要的结果的属性
data['production']['default']['reconnect'] = 'False'