PyYAML无法从文件加载,但可以写入
问题描述:
我遇到了PyYAML的问题,我不确定我是否做错了什么。 这是代码:PyYAML无法从文件加载,但可以写入
import yaml
open("a", "w+")
with open("a", "r+") as f:
yaml.dump({'foo':'bar'}, f)
print(yaml.load(f))
当我看目录文件是存在的,打开它在记事本中显示我:{foo: bar}
然而,print(yaml.load(f))
输出None
控制台
我有一种感觉,它与已经打开的文件和/或我用来打开文件的模式有关,因为我已经完成了一次总共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))
为什么你在那里有'open(“a”,“w +”)'? –
我的印象是,它创建了一个新的空文件 –