【发布时间】:2017-09-11 16:35:46
【问题描述】:
我有 yaml 文件,看起来像这样。
---
env:
credentials:
endpoint: "value"
username: "value"
tenant: "value"
password: "value"
ld_a:
network:
subnet-name:
- sub1
ld_filename:
- ld1.xml
fd_filename:
- fd1.xml
- fd2.xml
ld_b:
network:
subnet-name:
- sub2
ld_filename:
- ld2.xml
fd_filename:
- fd1.xml
- fd2.xml
在任何时候,用户都可以使用ld_c 或后续标签更新 YAML,或者删除任何标签。
到目前为止,我正在检查 dict 中的 ld_a 并处理嵌套的键、值(如下所示)。
with open(r'C:\file.yaml', 'r') as fd:
data = yaml.load(fd)
items = data.get('env')
for descriptor, value in items.iteritems():
if descriptor == 'credentials':
tenant = value.get('tenant')
username = value.get('username')
password = value.get('password')
endpoint = value.get('endpoint')
if descriptor == 'ld_a':
for descriptor in value.viewvalues():
for user_networks in descriptor.get('subnet-name'):
get_network_details(neutron, user_networks)
但是当用户添加/删除键时,例如 ld_c 。我们应该如何在python中处理这个。
【问题讨论】:
-
听起来您是在说用户可以通过修改运行程序的文件系统中 file.yaml 的内容来添加/删除密钥。如果用户不能在每次修改文件时重新运行程序是有原因的,那么您可能需要澄清您的假设/要求。
-
我不明白。您可以每隔一段时间重新加载文件并检查新的
keys(例如ld_c)并查看是否有东西可以对其执行操作。我的意思是你只需要在你的代码中添加越来越多的if语句! -
另外你说
subsequent tags是什么意思??你的意思是ld_c、ld_d、ld_e等等? -
@Peter:抱歉。 .我认为我的解释并不准确。让我改写一下。!要求是用户可以在 YAML 中添加/删除标签
ld_c等等.. 并执行代码。但是我的问题是我应该如何知道哪个关键用户输入了。 -
@TechJS : 是的.. 它的
ld_c等等.. 让我试试你发布的答案。!
标签: python python-2.7 dictionary yaml