我的目标是在可能为空的 YAML 文件中插入一个键值对。
例如,我的hiera.yaml
(用于 puppet)文件只包含三个连字符。
这是我的代码:
#!/usr/bin/python
import ruamel.yaml
import sys
def read_file(f):
with open(f, 'r') as yaml:
return ruamel.yaml.round_trip_load(yaml)
dict = {}
dict['first_name'] = sys.argv[1]
dict['last_name'] = sys.argv[2]
dict['role'] = sys.argv[3]
data = read_file('hiera.yaml')
pos = len(data)
data.insert(pos, sys.argv[1], dict, None)
ruamel.yaml.round_trip_dump(data, open('hiera.yaml', 'w'), block_seq_indent=1)
我正在运行它:
./alice.py Alice Doe 开发者
我得到如下输出:
Traceback (most recent call last):
File "./alice.py", line 16, in <module>
pos = len(data)
TypeError: object of type 'NoneType' has no len()
但是当我的 hiera.yaml 文件不为空时,例如:
$ cat hiera.yaml
john:
$./alice.py Alice Doe Developer
$ cat hiera.yaml
john:
alice:
first_name: Alice
last_name: Doe
role: Developer
然后它可以正常工作。
请告诉我如何将键值对(在我的例子中是一个字典)插入一个空的 YAML 文件。ruamel.yaml 官方页面的示例使用 doc 字符串作为示例 YAML 内容,然后插入键值对。