如何从yml文件中获取数据,然后作为字典返回

时间:2017-05-31 18:09:31

标签: python pyyaml

我有一个python函数,它将打开一个YAML文件并读取数据。 YAML文件包含两个api密钥和一个域。我想在字典中返回每个值,以便它可以在程序中使用。但是我收到了错误

  

“列表索引必须是整数,而不是str”。

我是否应该将变量设为全局变量,因此它不必返回任何内容?

代码是:

def ImportConfig():
    with open("config.yml", 'r') as ymlfile:
        config = yaml.load(ymlfile)
        darksky_api = config['darksky']['api_key']
        gmaps_api = ['gmaps']['api_key']
        gmaps_domain = ['gmaps']['domain']
    return {'darksky_api_key': darksky_api, 'gmaps_api_key': gmaps_api, 'gmaps_domain': gmaps_domain }

列表索引必须是整数是什么意思?我以为花括号表示字典?还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

如果您在Python的提示符下键入['xy'],您可以创建一个包含一个元素的列表,然后使用另一个字符串将其编入索引,从而独立于您的yaml文件:

['xy']['abc']

你会得到那个错误。

您在计划的第5行和第6行中缺少config

def ImportConfig():
    with open("config.yml", 'r') as ymlfile:
        config = yaml.safe_load(ymlfile)
        darksky_api = config['darksky']['api_key']
        gmaps_api = config['gmaps']['api_key']
        gmaps_domain = config['gmaps']['domain']
    return {'darksky_api_key': darksky_api, 'gmaps_api_key': gmaps_api, 'gmaps_domain': gmaps_domain }

请注意,在PyYAML中使用load会带来安全风险,对于您的数据,您应该使用safe_load()