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))
我在使用 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))