我有 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())
但我不知道如何将其连接在一起
要将键(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"))
希望这有帮助!
对于此特定用例,您需要明确引用 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