【发布时间】:2020-10-11 00:59:08
【问题描述】:
我有一个需要在 Python 中解析的 YAML 文件;它是 Ansible 库存文件的骨架,每天都会发生变化;我正在编写将构建该库存文件的解析器。
假设我有这个 yaml 文件:
---
all:
server1: ipaddr1
server2: ipaddr2
server3: ipaddr3
dbservers:
server2
server3
webgwservers:
server1
我有以下代码 sn-p 来加载 YAML:
environment = yaml.load(bom, Loader=yaml.SafeLoader)
for x in environment.keys():
key = environment[x]
if type(key) is list:
print(x+ ":")
if x == 'all':
for xx in environment['all']:
for k,v in xx.items():
print(k+":"+v)
if x == 'infra':
现在,我希望能够列出所有顶级键('all'、'dbservers'、'webgwservers')并根据它们的类型(列表、字典等)做一些事情。问题是,我可能有 yaml 的数据——更多的顶级键。
因此,我需要一种方法来解析顶级键并获得它们的名称,而无需对这些键名进行硬编码。
【问题讨论】:
-
我仍然不确定您要做什么。您能否提供一个示例,说明您的代码片段没有按照您的意愿执行?
-
@MustafaQuraish 我已经更新了上面的代码 sn-ps。你看到那些
if x == 'all'和if x == 'infra'行了吗?我需要摆脱这些并用变量替换它们。顶层键 all、infra、dbservers 可能会被替换并添加其他键,具体取决于我是否在 Prod、Preprod、QA 等部门。我的代码不应该提前知道 YAML 文件结构。
标签: python-3.x yaml