仅限python yaml打印键值

时间:2018-08-01 09:29:39

标签: python dictionary yaml

我想从以下yaml文件中仅打印a的值

1w:
    team1:
      contact: team1@email.com
2w:
    team2:
      contact: team2@email.com

到目前为止,我的工作如下:

    #!/usr/bin/env python

import yaml


def yaml_loader(filepath):
    with open(filepath, 'r') as file_descriptor:
#add condition to validate yaml
        data = yaml.load(file_descriptor)
    return data

def yaml_dump(filepath, data):
    with open(filepath, w) as file_descriptor:
        yaml.dump(data, file_descriptor)


if __name__ == "__main__":
    filepath = "log/log_registration.yaml"
    data = yaml_loader(filepath)

    items = data.get('3w')
    for item_roletype, value in items.iteritems():
        print value

编辑帖子是因为我意识到我的Yaml应该具有不同的布局,以避免多个条目被覆盖。

在这一点上,我不确定如何仅打印“ team1”和“ team2”的名称以及其他名称。没有联系信息。

上面的代码目前无法使用...

3 个答案:

答案 0 :(得分:1)

自您编辑问题以来已进行编辑

新的Yaml数据

1w:
    team1:
        contact: team1@email.com
2w:
    team2:
        contact: team2@email.com

好的,所以我们可以用data = yaml_loader(filepath)看一下data

{'1w': {'team1': {'contact': 'team1@email.com'}},
 '2w': {'team2': {'contact': 'team2@email.com'}}}

我们可以像这样提取数据

for week, teams in data.items():
    for team in teams.keys():
        print('{}: {}'.format(key, team))

输出:

1w: team1
2w: team2

原始答案:我认为您在处理复杂的事情上有些

数据:

1w:
    a: team1
    b: team1@email.com
2w:
    a: team2
    b: team2@email.com

代码:

data = yaml_loader(filepath)
for key, value in data.items():
    print('{}[a] = {}'.format(key, value['a']))

输出(连同您的数据)

1w[a] = team1
2w[a] = team2

答案 1 :(得分:0)

if __name__ == "__main__":
    filepath = "log/log_registration.yaml"
    data = yaml_loader(filepath)

    for _, value in data.iteritems():
        for key, _ in value.iteritems():
            print(key)

答案 2 :(得分:0)

我不确定您要寻找什么输出。 yaml文件中没有像“ 3w”这样的键

如果需要的输出是这样的:

a:小组2

b:team2@email.com

然后您的代码段应类似于:

items = data.get('2w')
for item_roletype, value in items.iteritems():
    print "%s: %s" % (item_roletype, value)