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

+1

为什么你在那里有'open(“a”,“w +”)'? –

+0

我的印象是,它创建了一个新的空文件 –

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