2017-01-15 4 views
1

hinzufügen Ich habe versucht, einen neuen Knoten nach dem example hinzufügen, aber:Wie man einen Knoten mit ruamel.yaml

myitems = ruamel.yaml.load(inp, ruamel.yaml.RoundTripLoader) 
myitems['abc'].append('test') 

gibt mir eine Fehlermeldung:

Traceback (most recent call last): 
    File "item_updater.py", line 148, in <module> 
    myitems['wohnung'].append('test') 
AttributeError: 'CommentedMap' object has no attribute 'append' 

I ruamel.yaml v0 bin mit .13.7

Was mache ich falsch?

+0

Sind Sie sicher, dass Sie Version 0.8 verwenden? –

+0

Version 0.8 von was? – msinn

+0

Ich benutze ramel.yaml v0.13.7 (das ist die neueste Version) – msinn

Antwort

0

Ihr Fehler kommt nicht von dem von Ihnen angegebenen Beispiel, wie in der inp des Beispiels gibt es keine wohnung, die in Ihrem Fehler angezeigt wird.

Sie haben vergessen, wahrscheinlich eine - irgendwo:

wohnung: 
    a: 1 

statt:

wohnung: 
- a: 1 

nur auf den letzteren Sie myitems['wohnung'].append('test') mit anhängen.

Das Beispiel funktioniert, aber ohne Ihren echten YAML-Eingang zu zeigen, ist es schwierig zu sehen, was die genaue Ursache Ihres Fehlers ist.

+0

Ok, beim Lesen dieses Beispiels war ich unter dem Eindruck nicht nur '' 'Daten ['abc']. Append ('b')' '' würde arbeiten, aber '' 'Daten ['xyz']. append ('b')' '' würde auch funktionieren. – msinn

+0

Der Toplevel dieser YAML-Datei ist ein Mapping. Sein Schlüssel 'abc' hat einen Wert, der eine Sequenz ist. Dies wird in Python als eine Unterklasse von "list" geladen (mit dem ersten Element das "a"). Der Schlüssel 'xyz' der Toplevel hat einen Wert, der wiederum ein Mapping ist. Dies wird als a-Unterklasse von -dict geladen (mit Schlüssel/Wert-Paaren '('a', 1)', '('b', 2)', usw.) Sie können an die 'liste' anhängen, aber nicht zum "dict" – Anthon

+0

Ok, verstanden. Danke für die Klarstellung. - Im Allgemeinen habe ich einige Schwierigkeiten, die Details der Yaml-Implementierung in Python zu verstehen. PyYAML und ruamel.yaml sind nicht ausführlich dokumentiert. – msinn

Verwandte Themen