我在 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)
Run Code Online (Sandbox Code Playgroud)
此代码输出具有正确编辑的文件,但是,当我实际进入文件 ( elastic.yml) 时,原始文档未更改。
这是我第一次使用 ruamel.yaml,我宁愿坚持这个,因为我注意到 PyYAML 不保留评论。
运行python代码后的YAML文件:
cluster.name: my-application
# Use a descriptive name for the node:
node.name: HappyNode
Run Code Online (Sandbox Code Playgroud)
运行python代码后输出到控制台:
cluster.name: BLABLABLABLABLA
# Use a descriptive name for the node:
node.name: HEHEHEHEHEHEHE
Run Code Online (Sandbox Code Playgroud)
我已经尝试将它添加到代码的底部以确保它写入文件,如下所述:[ Matheus Portela's response ]但我没有运气:
with open('elastic.yml', 'w') as f:
yaml.dump(data, f)
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
data['cluster.name'] = 'BLABLABLABLABLA'
TypeError: 'NoneType' object does not support item assignment
Run Code Online (Sandbox Code Playgroud)
假设 (unchanged)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='')
Run Code Online (Sandbox Code Playgroud)
得到以下输出:
cluster.name: BLABLABLABLABLA
# Use a descriptive name for the node:
node.name: HEHEHEHEHEHEHE
Run Code Online (Sandbox Code Playgroud)
由于程序显示文件的内容,您可以确定它已更改
| 归档时间: |
|
| 查看次数: |
3239 次 |
| 最近记录: |