gpt4 book ai didi

python - PyYaml.load_all() 返回生成器而不是字典?

转载 作者:太空狗 更新时间:2023-10-30 02:02:17 24 4
gpt4 key购买 nike

我是第一次使用 Yaml(和 Python!)。我试图从单个 .yaml 文件中加载多个文档,但没有得到我期望的结果。我期待一个包含每个文档的字典,但我得到了一个生成器对象......?我应该注意到,当我在之前的测试中对一个单个文档 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

最佳答案

好吧,看看 load_all implementation很明显为什么会发生这种情况:

def load_all(stream, Loader=Loader):
"""
Parse all YAML documents in a stream
and produce corresponding Python objects.
"""
loader = Loader(stream)
try:
while loader.check_data():
yield loader.get_data()
finally:
loader.dispose()

它确实是一个生成器。所以你只需要将它转换成一个列表:

 data = list(yaml.load_all(file_descriptor))

关于python - PyYaml.load_all() 返回生成器而不是字典?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42802058/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com