【发布时间】:2019-02-11 04:47:23
【问题描述】:
我正在尝试通过 python 脚本将重复键:值对附加到 YAML 文件中的嵌套字典中。以下是我为实现此目的而编写的代码的 sn-p:
import click
import ruamel.yaml
def organization():
org_num = int(input("Please enter the number of organizations to be created: "))
org_val = 0
while org_val!= org_num:
print ("")
print("Please enter values to create Organizations")
print ("")
for org in range(org_num):
organization.org_name = str(raw_input("Enter the Organization Name: "))
organization.org_description = str(raw_input("Enter the Description of Organization: "))
print ("")
if click.confirm("Organization Name: "+ organization.org_name + "\nDescription: "+ organization.org_description + "\nIs this Correct?", default=True):
if org_val == 0:
org_val = org_val + 1
yaml = ruamel.yaml.YAML()
org_data = dict(
organizations=dict(
name=organization.org_name,
description=organization.org_description,
)
)
with open('input.yml', 'a') as outfile:
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.dump(org_data, outfile)
else:
org_val = org_val + 1
yaml = ruamel.yaml.YAML()
org_data = dict(
name=organization.org_name,
description=organization.org_description,
)
with open('input.yml', 'r') as yamlfile:
cur_yaml = yaml.load(yamlfile)
cur_yaml['organizations'].update(org_data)
if cur_yaml:
with open('input.yml','w') as yamlfile:
yaml.indent(mapping=2, sequence=4, offset=2)
yaml.dump(cur_yaml, yamlfile)
return organization.org_name, organization.org_description
organization()
在 python 脚本的末尾,我的 input.yml 文件应如下所示:
version: x.x.x
is_enterprise: 'true'
license: secrets/license.txt
organizations:
- description: xyz
name: abc
- description: pqr
name: def
但是,每次脚本运行时,它都会覆盖它,而不是将值附加到组织。
我也尝试过使用追加而不是更新,但出现以下错误:
AttributeError: 'CommentedMap' 对象没有属性 'append'
我能做些什么来解决这个问题?
此外,由于我是开发新手,因此任何有关改进此代码的建议都会非常有帮助。
【问题讨论】:
-
你使用的是哪个 yaml 库?
-
在帖子中添加了相同的内容。对不起,我是stackoverflow的新手。如果您需要更多信息,请告诉我。
标签: python python-2.7 yaml ruamel.yaml