Python解析yaml文件

问题描述 投票:0回答:2

我有 yaml 文件,我想获取特定的键值对集。我怎样才能做到这一点?

DEV:
  A: "A_DEV_config.xml"
  B: "B_DEV_config.xml"
  C: "C_DEV_config.xml"
PROD:
  D: "D_PROD_config.xml"
  E: "E_PROD_config.xml"
  F: "E_PROD_config.xml"
OTHERS:
  G: "G_config.xml"
  H: "H_config.xml"
  K: "K_config.xml"

我想要得到这样的东西:

if I check DEV == true:

output list of keys ->  A,B,C,G,H,K

if I check PROD == true:

output list of keys ->  D,E,F,G,H,K

您可能已经注意到,在这两种情况下我都需要获得

OTHERS

我尝试使用代码:

stream = open(yml_file, 'r')
data = yaml.safe_load(stream)
print(data.get("DEV").keys())

但我不知道如何将其连接在一起

python yaml key-value
2个回答
0
投票

要将键(DEV 或 PROD)与 OTHERS 部分中的键连接起来,您需要定义一个函数来根据环境获取键。

下面我写了一个函数:

import yaml

with open(yml_file, 'r') as stream:
    data = yaml.safe_load(stream)

def get_keys(environment):
    env_keys = list(data.get(environment, {}).keys())
    others_keys = list(data.get("OTHERS", {}).keys())
    return env_keys + others_keys

if DEV == True:
    print(get_keys("DEV"))
elif PROD == True:
    print(get_keys("PROD"))

希望这有帮助!


0
投票

对于此特定用例,您需要明确引用 OTHERS,因为您的查找例如是“PROD”,并且您希望将其包含在“OTHERS”中。你可以这样做:

import yaml

def process(filename, key):
    with open(filename) as y:
        data = yaml.safe_load(y)
        return list(data[key].keys()) + list(data['OTHERS'].keys())

for key in 'DEV', 'PROD':
    print(*process('foo.yml', key), sep=',')

输出:

A,B,C,G,H,K
D,E,F,G,H,K

另一种方法是获取所有键感兴趣的项目除了指定的键 - 即,您可以说“我想要所有东西除了‘DEV’”在这种情况下:

import yaml

def process(filename, key):
    with open(filename) as y:
        data = yaml.safe_load(y)
        output = []
        for _key in data:
            if _key != key:
                output.extend(data[_key].keys())
        return output

for key in 'DEV', 'PROD':
    print(*process('foo.yml', key), sep=',')

输出:

D,E,F,G,H,K
A,B,C,G,H,K
© www.soinside.com 2019 - 2024. All rights reserved.