我遇到了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
答案 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))