2017-10-19 76 views
1

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

我的印象是,它創建了一個新的空文件 –

回答

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))