dump()
Die Routinen in PyYAML haben mehrere optionale Argumente, von denen die erste den Strom wobei die Daten werden (stream=
) serialisiert werden.
Wenn Sie nicht diesen Strom angeben eine Datei wie Objekt wird erstellt (StringIO()
oder BytesIO()
), an dem die Daten serialisiert und in diesem Fall sind die die dump()
Routine zurück, die getvalue()
Objekte, wo es in der Regel nur None
zurückgibt.
Da Sie keinen Ausgabestream angeben, weiß PyYAML nicht, wo die Ausgabe zu schreiben ist, und gibt das Ergebnis von getvalue()
in Ihrem Fall als Zeichenfolge zurück. Wenn Sie den encoding=
Parameter zur Verfügung gestellt hätten, würden Sie ein Bytearray auf Python 3 und nicht eine Zeichenkette erhalten.
Sie können natürlich print
diese Zeichenfolge, aber das ist einer der häufigsten Fehler, die ich sehe Menschen mit PyYAML machen. Für eine kleine Datenstruktur ist dies entschuldbar, aber für große Datenstrukturen kann das Erstellen einer Zeichenfolgendarstellung im Speicher unnötig viel Speicher belegen.
Sie sollten für die Bereitstellung der Stromparameter auf die Gewohnheit gewöhnen: Sie
>>> import yaml
>>> test2 = [{'A':['a', 'b']}, {'B':'b'}]
>>> yaml.dump(test2)
'- A: [a, b]\n- {B: b}\n'
>>> import sys
>>> yaml.dump(test2, stream=sys.stdout)
- A: [a, b]
- {B: b}
>>>
Dies auch davon ab, ein Doppel Newline am Ende des Ausgangs (einer aus der Serialisierung und einen von print
) verhindert .
Haben Sie versucht, 'print' zu verwenden? Strings in der interaktiven Eingabeaufforderung wie dieser zeigen niemals Zeilenumbrüche, Sie müssen sie "drucken". –
Nein, ich bin ein Idiot. Vielen Dank. – Fallacy11
Kein Problem. Ich postete als Antwort, Verstand akzeptiert? –