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

时间:2017-10-19 03:55:39

标签: python-3.x pyyaml

我遇到了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输出到控制台

我有一种感觉它与已经打开的文件和/或我用来打开文件的模式有关,因为当我搞乱时,我已经让它工作了大约1次,当我重复完全相同的操作时,它再次无法打印None

1 个答案:

答案 0 :(得分:2)

首先,您的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))