解析 yaml 文件并获取字典

Sha*_*lor 3 python pyyaml

我希望能够采用下面定义的 YAML 并将其转换为字典。

development:
    user:dev_uid
    pass:dev_pwd
    host:127.0.0.1
    database:dev_db

production:
    user:uid
    pass:pwd
    host:127.0.0.2
    database:db
Run Code Online (Sandbox Code Playgroud)

我已经能够使用 YAML 库来加载数据。但是,我的字典似乎将环境项包含为一个长字符串。

这段代码:

#!/usr/bin/python3

import yaml

config  = yaml.load(open('database.conf', 'r'))

print(config['development'])
Run Code Online (Sandbox Code Playgroud)

产生以下输出。

user:dev_uid pass:dev_pwd host:127.0.0.1 database:dev_db
Run Code Online (Sandbox Code Playgroud)

我无法通过键名访问任何条目或使用该yaml.load方法加载该字符串。

print(config['development']['user'])
Run Code Online (Sandbox Code Playgroud)

此代码产生以下错误:

TypeError: string indices must be integers
Run Code Online (Sandbox Code Playgroud)

理想情况下,我希望最终得到一个返回字典或 a 的解析函数,list以便我可以通过键名或使用以下dot运算符访问属性:

print(config['development']['user'])
config.user
Run Code Online (Sandbox Code Playgroud)

我哪里错了?

wim*_*wim 7

您的“yaml”不是映射的映射,而是字符串的映射。在 YAML 1.2 中,块映射条目在分隔符之后需要空格,例如

development:
    user: dev_uid
    pass: dev_pwd
    host: 127.0.0.1
    database: dev_db

production:
    user: uid
    pass: pwd
    host: 127.0.0.2
    database: db
Run Code Online (Sandbox Code Playgroud)

不要尝试预处理此文本。相反,找出谁生成了标记并将规范扔给他们