gpt4 book ai didi

python - 如何使用 ruamel.yaml 而不是 pyyaml 通过 python 编辑 YAML 文件?

转载 作者:行者123 更新时间:2023-12-02 03:32:06 25 4
gpt4 key购买 nike

我在 StackOverflow 上发现了类似的问题,但是当我尝试实现代码时 [ Anthons's response ] 为了适应我的情况,我注意到它实际上并没有编辑 YAML 文件。另外,我需要使用ruamel.yaml ,而不是 PyYAML。我审阅的许多答案都使用 PyYAML。

import sys
import ruamel.yaml

yaml = ruamel.yaml.YAML()
# yaml.preserve_quotes = True

with open('elastic.yml') as fp:
data = yaml.load(fp)

data['cluster.name'] = 'BLABLABLABLABLA'
data['node.name'] = 'HEHEHEHEHEHEHE'

yaml.dump(data, sys.stdout)

此代码输出具有正确编辑的文件,但是,当我实际进入该文件 (elastic.yml) 时,原始文档未更改。

这是我第一次使用 ruamel.yaml我宁愿坚持这一点,因为我注意到 PyYAML 不保留注释。

运行 python 代码后的 YAML 文件:

cluster.name: my-application

# Use a descriptive name for the node:
node.name: HappyNode

运行 python 代码后控制台的输出:

cluster.name: BLABLABLABLABLA

# Use a descriptive name for the node:
node.name: HEHEHEHEHEHEHE

我尝试将其添加到代码底部以确保其写入文件,如下所述:[ Matheus Portela's response ] 但我没有运气:

with open('elastic.yml', 'w') as f:
yaml.dump(data, f)

我收到以下错误:

data['cluster.name'] = 'BLABLABLABLABLA'
TypeError: 'NoneType' object does not support item assignment

最佳答案

假设(未更改的)elastic.yml 是您的输入,您可以运行:

import ruamel.yaml  

file_name = 'elastic.yml'
yaml = ruamel.yaml.YAML()

with open(file_name) as fp:
data = yaml.load(fp)

data['cluster.name'] = 'BLABLABLABLABLA'
data['node.name'] = 'HEHEHEHEHEHEHE'

with open(file_name, 'w') as fp:
yaml.dump(data, fp)

# display file
with open(file_name) as fp:
print(fp.read(), end='')

获得以下输出:

cluster.name: BLABLABLABLABLA

# Use a descriptive name for the node:
node.name: HEHEHEHEHEHEHE

由于程序显示了文件的内容,因此您可以确定它已更改

关于python - 如何使用 ruamel.yaml 而不是 pyyaml 通过 python 编辑 YAML 文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51546872/

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