python - 解析 yaml 文件并获取字典

标签 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

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

这段代码:
#!/usr/bin/python3

import yaml

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

print(config['development'])

产生以下输出。
user:dev_uid pass:dev_pwd host:127.0.0.1 database:dev_db

我无法通过键名访问任何条目或随后使用 yaml.load 加载该字符串方法。
print(config['development']['user'])

此代码产生以下错误:
TypeError: string indices must be integers

理想情况下,我希望得到一个返回字典或 list 的解析函数。所以我可以通过键名或使用 dot 访问属性运营商喜欢:
print(config['development']['user'])
config.user

我哪里错了?

最佳答案

您的“yaml”不是映射的映射,而是字符串的映射。在 YAML 1.2 中,块映射条目 need whitespace after the separator ,例如

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

不要尝试预处理此文本。相反,找到谁生成了标记和 throw the spec at them .

关于python - 解析 yaml 文件并获取字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50472011/

相关文章:

Python多重继承,从公共(public)子类初始化

django - 如何在 yaml 中 Django 转储数据嵌套模型

python - 如何使用 Python 读取自定义序列化 YAML 对象(由 Rails 编写)?

python - 基于 YAML 数据的条件 Python for 循环

python - 如何使用python保留YAML文件中键值的顺序(不是字母顺序)

odoo11 库存模块安装时出现 python yaml 错误。 yaml.constructor.ConstructorError : could not determine a constructor for the tag '!python'

python - 为什么以不同的方式生成数组会导致代码不同部分的大幅加速?

python - 如何从 python 使用 C++ 库

python - Pandas 索引器方法和元组作为参数

python - 列表理解和循环之间的区别