PyYaml.load全部生成器返回()而不是dict?

2024-04-25 04:14:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Yaml(和Python!)第一次。我试图从一个.yaml文件中加载多个文档,但没有得到预期的结果。我希望得到一个包含每个文档的dict的dict,但是得到了一个generator对象。。。?我应该注意到当我使用山药负荷()在之前的一个测试中(而不是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

以及试图加载和打印dict的代码:

^{pr2}$

…生成以下终端输出:

<generator object load_all at 0x0000000003A64990>

Process finished with exit code 0

Tags: 文件name文档falseyamldatawithload
1条回答
网友
1楼 · 发布于 2024-04-25 04:14:57

好吧,看看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()

它确实是一个发电机。所以您只需将其转换为一个列表:

^{pr2}$

相关问题 更多 >