提问人:macder 提问时间:9/22/2023 更新时间:9/22/2023 访问量:58
Python 解析 yaml 文件 [已关闭]
Python parse yaml file [closed]
问:
我有 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())
但我不知道如何将它们连接在一起
答:
0赞
jmsm1g19
9/22/2023
#1
要将密钥(DEV 或 PROD)与 OTHERS 部分中的密钥连接起来,您需要定义一个函数来根据环境获取密钥,并以任何一种方式与 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赞
macder
9/22/2023
太好了,谢谢。它对我有用
1赞
Codist
9/22/2023
#2
对于此特定用例,您需要显式引用 OTHERS,因为您的查找是“PROD”,并且您希望将其包含在“OTHERS”中。您可以这样做:
import yaml
def process(filename, key):
with open(filename) as y:
data = yaml.safe_load(y)
return list(data[key]) + list(data['OTHERS'])
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 set(data) - {key}
output.extend(data[_key])
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
评论
data.get("DEV")
OTHERS
data.get("DEV")
data.get("OTHERS")