2017-10-19 16 views
1

PyYAMLに問題があります。何か間違っているかどうかはわかりません。 これはコードです: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コンソールに

私はそれがすでに開いているファイルやファイルを開くために使用しているモードと関係があると感じています。なぜなら、私はそれがうまくいかなかったのと同じ操作をやり直して、もう一度、印刷None

+1

なぜあなたは 'open(" a "、" w + ")を持っていますか? –

+0

私はそれが新しい空のファイルを作成したという印象を受けていました –

答えて

2

まず、open("a", "w+")は何も役に立ちません。

さらに重要なことに、一度yaml.dump(..., f)を実行すると、ファイルポインタはファイルの最後にあります。その時点でyaml.load(f)を呼び出すと、ファイルの終わりの位置から読み取られます。

その時点でf.seek(0)を実行できます。そうすれば動作するはずです。

同じオープンファイルから読み書きする理由はわかりませんが、YAMLはファイルを更新するのが良くないため、ダンプ後にファイルを閉じる必要があります。

文書番号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)) 
関連する問題