gpt4 book ai didi

python - 如何使用 python 更新 yaml 文件

转载 作者:IT老高 更新时间:2023-10-28 21:18:18 27 4
gpt4 key购买 nike

我有一个包含以下内容的 some.yaml 文件。

    init_config: {}
instances:
- host: <IP>
username: <username>
password: <password>

yaml 文件应按如下方式解析和更新。

    init_config: {}
instances:
- host: 1.2.3.4
username: Username
password: Password

如何解析这些值并适本地更新它们?

最佳答案

ruamel.yaml包被专门增强(我从 PyYAML 开始)来执行这种往返、程序化、更新。

如果您以(请注意我删除了多余的初始空格)开头:

init_config: {}
instances:
- host: <IP> # update with IP
username: <username> # update with user name
password: <password> # update with password

然后运行:

import ruamel.yaml

file_name = 'input.yaml'
config, ind, bsi = ruamel.yaml.util.load_yaml_guess_indent(open(file_name))

instances = config['instances']
instances[0]['host'] = '1.2.3.4'
instances[0]['username'] = 'Username'
instances[0]['password'] = 'Password'

yaml = ruamel.yaml.YAML()
yaml.indent(mapping=ind, sequence=ind, offset=bsi)
with open('output.yaml', 'w') as fp:
yaml.dump(config, fp)

输出将是:

init_config: {}
instances:
- host: 1.2.3.4 # update with IP
username: Username # update with user name
password: Password # update with password

映射键(hostusernamepassword)、样式和注释的顺序是无需任何进一步的具体操作即可保存。

您可以手动进行传统加载,并自己设置缩进值,而不是猜测缩进和 block 序列缩进:

yaml = ruamel.yaml.YAML()
yaml.indent(mapping=6, sequence=4)
with open(file_name) as fp:
config = yaml.load(fp)

如果您查看此答案的历史,您可以了解如何使用更有限的 PyYAML 之类的 API 来执行此操作。

关于python - 如何使用 python 更新 yaml 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28557626/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com