PyYAML 无法从文件加载但可以写入

PyYAML can't load from file but can write

我在使用 PyYAML 时遇到问题,我不确定我是否做错了什么。 这是代码:

import yaml
open("a", "w+")
with open("a", "r+") as f:
    yaml.dump({'foo':'bar'}, f)
    print(yaml.load(f))

当我查看目录文件 a 时,在记事本中打开它会显示:{foo: bar}

但是,print(yaml.load(f)) 输出 None 到控制台

我觉得这与文件已经打开有关 and/or 我用来打开文件的模式,因为我已经让它工作了 1 次我在胡闹,当我重复完全相同的操作时,它再次不起作用,打印 None

首先你的open("a", "w+")没有做任何有用的事情。

但更重要的是一旦你这样做 yaml.dump(..., f) 文件指针就在文件的末尾。此时调用 yaml.load(f) 将从文件的末尾位置开始读取,该文件中该位置之后没有任何内容。

你现在可以做 f.seek(0),然后事情应该会成功。

从你的例子中不清楚为什么你会从同一个打开的文件读取和写入,YAML 不擅长更新文件,所以 IMO 你应该总是在转储后关闭一个文件。

如文档所述 yaml.load() 可能不安全,很少需要使用它。请改用 yaml.safe_load()

import yaml

with open("a", "w") as f:
    yaml.safe_dump({'foo':'bar'}, f)
with open("a") as f:
    print(yaml.safe_load(f))