chcę analizować dokumenty yaml jak na poniższymdokument Ładowanie jako surowego ciąg w YAML z PyYAML
meta-info-1: val1
meta-info-2: val2
---
Plain text/markdown content!
jhaha
Gdybym load_all
to z PyYAML, pojawia się następujący
>>> list(yaml.load_all(open('index.yml')))
[{'meta-info-1': 'val1', 'meta-info-2': 'val2'}, 'Plain text/markdown content! jhaha']
co usiłuję aby to osiągnąć, plik yaml powinien zawierać dwa dokumenty, a drugi powinien być interpretowany jako dokument jednoliniowy, a dokładniej dowolny duży fragment tekstu z formatowaniem przecinków. Nie chcę, aby był on analizowany jako składnia YAML.
W powyższym przykładzie PyYAML zwraca drugi dokument jako pojedynczy ciąg. Ale jeśli drugi dokument ma na przykład znak :
zamiast na przykład !
, pojawia się błąd składni. Dzieje się tak dlatego, że PyYAML analizuje zawartość w tym dokumencie.
Czy jest sposób, w jaki mogę powiedzieć PyYAML, że drugi dokument jest zwykłym ciągiem, a nie parsowaniem?
Edytuj: Kilka doskonałych odpowiedzi tam. Podczas korzystania z cytatów lub literalnej składni rozwiązuje ten problem, chciałbym, aby użytkownicy mogli pisać tekst bez żadnych dodatkowych cruft. Tylko trzy: -
(lub .
) i wypisz duży fragment zwykłego tekstu. Które mogą zawierać również cytaty. Chciałbym wiedzieć, czy mogę powiedzieć PyYAML, by przeanalizował tylko jeden dokument i dał mi drugi surowiec.
Eidt 2: Tak, pomysł Adaptacja AGF jest, zamiast korzystania z try/z wyjątkiem drugiego dokumentu może być prawidłowa składnia yaml,
config_content, body_content = open(filename).read().split('\n---')
config = yaml.loads(config_content)
body = yaml.loads(body_content)
Dzięki rww.
Twój dokument nie jest ważny YAML –
Wiem. Nie zamierzam pisać poprawnego yaml w drugim dokumencie. Chcę, aby był czytany jako surowy ciąg znaków, niezapisany jako yaml. –