2017-10-19 21 views
1

Ich habe ein Problem mit PyYAML und ich bin mir nicht sicher, ob ich etwas falsch mache. Diese ist der Code:PyYAML kann nicht aus der Datei laden, aber schreiben

import yaml 
open("a", "w+") 
with open("a", "r+") as f: 
    yaml.dump({'foo':'bar'}, f) 
    print(yaml.load(f)) 

Als ich in der Verzeichnisdatei eines Blick ist da, und öffnen Sie sich im Editor zeigen mir diese: {foo: bar}

jedoch print(yaml.load(f)) Ausgänge None an die Konsole

Ich habe das Gefühl, dass es damit zu tun hat, dass die Datei bereits geöffnet ist und/oder den Modus, den ich benutze, um eine Datei zu öffnen, weil ich sie zum ersten Mal benutzt habe, als ich herum und wann Ich wiederholte den GENAUEN GLEICHEN BETRIEB, es funktionierte nicht, wieder Drucken None

+1

Warum haben Sie 'offen (" a "," w + ")' da? –

+0

Ich hatte den Eindruck, dass dadurch eine neue und leere Datei erstellt wurde –

Antwort

2

Zunächst einmal Ihre open("a", "w+") tut nichts nützliches.

Aber noch wichtiger, sobald Sie yaml.dump(..., f) tun, befindet sich der Dateizeiger am Ende der Datei. Das Aufrufen von yaml.load(f) an diesem Punkt wird von der Endposition der Datei gelesen, wobei dieser Position in dieser Datei nichts folgt.

Sie können f.seek(0) an dem Punkt tun, und dann sollte es funktionieren.

Aus Ihrem Beispiel ist es nicht klar, warum Sie lesen und schreiben von der gleichen geöffneten Datei, YAML ist nicht gut beim Aktualisieren von Dateien, so IMO sollten Sie immer eine Datei nach dem Dumping schließen.

Wie dokumentiert yaml.load() kann unsicher sein, und es ist selten erforderlich, es zu verwenden. Verwenden Sie stattdessen 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)) 
Verwandte Themen