【发布时间】:2018-10-19 21:56:45
【问题描述】:
我需要使用 python 代码修改 YAML 文件中的一行。我要修改的是- {tokens开头的那一行:
rpc: sync
nodes_dir: /data/tmp
list_provider:
- class_name: org.apache.test
parameters:
- {tokens: '{{ printf "%s/%s/%s/nodes" (env "var1") (env "var2") (env "var3") | key}}'}
我想达到这个结果:
rpc: sync
nodes_dir: /data/tmp
list_provider:
- class_name: org.apache.test
parameters:
- {tokens: ''}
我使用的是 python 的 YAML 加载器,因为它不允许文件中的特殊字符。
with open('test.yaml', 'r') as file:
data = yaml.load(file)
print(data)
data["list_provider"][0]['parameters'][0]['tokens'] = str(list_var)
with open("test.yaml", "w") as f:
yaml.dump(data, f)
我无法使用 ruamel.yaml 模块,因为我无法在我的机器上安装新软件包。如何使用 PyYAML 实现这一点?
【问题讨论】:
-
感谢您的编辑。我正在使用 python 3.6.4 和 pyyaml 3.12 以及您的示例 yaml 和您提供的代码来测试您的代码。我已经用
''替换了list_var,因为我不知道那里发生了什么。我得到了想要的输出?我是否使用错误的版本进行测试? -
我用的是python 2.7.13,这个版本不行
-
您收到什么消息错误?或者,期望的结果和实际的结果有什么区别?
-
@brandizzi 如果你运行该代码,你会得到一个
NameError: name 'list_var' is not defined。 -
错误消息:yaml.scanner.ScannerError:在扫描下一个令牌时发现字符'%'不能在“/tmp/test.yaml”中启动任何令牌,第 361 行,第 32 列跨度>