Be-Dokument als raw-string in yaml mit PyYAML
Frage
Ich möchte analysieren, yaml-Dokumente wie die folgenden
meta-info-1: val1
meta-info-2: val2
---
Plain text/markdown content!
jhaha
Wenn Ich load_all
diese mit PyYAML, bekomme ich die folgende
>>> list(yaml.load_all(open('index.yml')))
[{'meta-info-1': 'val1', 'meta-info-2': 'val2'}, 'Plain text/markdown content! jhaha']
Was ich versuche zu erreichen ist, dass die yaml-Datei sollte enthalten zwei Dokumente, und das zweite ist, soll verstanden werden als eine einzelne Zeichenfolge Dokument, genauer gesagt jeder großen Körper von text mit markdown-Formatierung.Ich will nicht, dass es analysiert werden, wie YAML-syntax.
In dem obigen Beispiel, PyYAML gibt das zweite Dokument als eine einzelne Zeichenfolge.Aber wenn das zweite Dokument ist ein :
Zeichen an die Stelle der !
zum Beispiel, ich bekomme einen Syntaxfehler.Dies ist, weil PyYAML Analyse der Stoff in diesem Dokument.
Gibt es eine Möglichkeit, ich kann sagen, PyYAML, dass das zweite Dokument ist lediglich eine raw-string und nicht analysieren?
Bearbeiten:Ein paar sehr gute Antworten gibt.Während die Verwendung von Anführungszeichen oder das literal-syntax löst das besagte problem, ich möchte die Benutzer werden in der Lage zu schreiben, die nur text ohne zusätzliche cruft.Nur die drei -
's (oder .
's) und schreiben Sie sich eine große Menge an text.Das könnte auch Zitate zu.Also, ich würde gerne wissen, ob ich sagen kann, PyYAML zu analysieren, nur ein Dokument, und geben Sie den zweiten, um mir roh.
Eidt 2:Ja, die Anpassung der agf die Idee, anstelle der Verwendung eines try/außer als das zweite Dokument gültigen yaml-syntax
config_content, body_content = open(filename).read().split('\n---')
config = yaml.loads(config_content)
body = yaml.loads(body_content)
Dank der agf.
Lösung
Können Sie tun
raw = open(filename).read()
docs = []
for raw_doc in raw.split('\n---'):
try:
docs.append(yaml.load(raw_doc))
except SyntaxError:
docs.append(raw_doc)
Wenn Sie nicht die Kontrolle über das format des Originaldokuments.
Aus der PyYAML docs,
Double-quoted ist die mächtigste Stil und die nur Stil, die können express jeden beliebigen Skalar-Wert.Double-quoted Skalare ermöglichen die Flucht.Mit der Flucht-Sequenzen \x** und \u****, Sie können express jeden ASCII-oder Unicode-Zeichen.
Damit es klingt wie es gibt keine Möglichkeit zur Darstellung einer beliebigen skalaren in der Analyse, wenn es nicht in doppelte Anführungszeichen gesetzt.
Andere Tipps
Wenn alle Sie wollen, ist, zu entkommen, die auf den Doppelpunkt in YAML, dann schließen Sie es in einzelne oder doppelte Anführungszeichen.Sie können auch versuchen, literal style für Ihre zweite Dokument, das behandelt werden sollte als einzige Skalare.