【发布时间】:2017-03-15 05:56:02
【问题描述】:
我是第一次使用 Yaml(和 Python!)。我试图从单个 .yaml 文件中加载多个文档,但没有得到我期望的结果。我期待一个包含每个文档的 dicts 的 dict,但我却得到了一个生成器对象......?我应该注意到,当我在之前的测试中对 single 文档 yaml 文件使用 yaml.load()(而不是 load_all())时,我能够很好地获取字典。
我遗漏了哪些明显的事情导致我无法收到多个文档?
测试yaml:
---
Tiles:
dungeon_floor:
name: 'Dungeon Floor'
blocked: False
block_sight: False
terrain_type: CONST.E_TERRAIN_TYPES.FLAT_FLOOR
persistent_effects: 'None'
...
---
NPCs:
gnoll:
name: "Gnoll"
equipment: Sword, Shield
def yaml_loader(filepath):
"""Load a yaml file."""
with open(filepath, "r") as file_descriptor:
data = yaml.load_all(file_descriptor)
return data
以及尝试加载和打印字典的代码:
def yaml_loader(filepath):
"""Load a yaml file."""
with open(filepath, "r") as file_descriptor:
data = yaml.load_all(file_descriptor)
return data
if __name__ == "__main__":
filepath = CONST.YAML_ECS_CONFIG_PATH
data = yaml_loader(filepath)
print(data)
...产生以下终端输出:
<generator object load_all at 0x0000000003A64990>
Process finished with exit code 0
【问题讨论】:
-
你为什么期待一个 dicts 回来?什么会神奇地成为该字典中每个文档的密钥? PyYAML
load()和load_all()如果您不能完全控制(现在和将来)您的输入,则可能会很危险,最好使用safe_load()或safe_load_all()。
标签: python dictionary yaml