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.

War es hilfreich?

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.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top