我想解析 yaml 文档,如下所示
meta-info-1: val1
meta-info-2: val2
---
Plain text/markdown content!
jhaha
如果我load_all
使用 PyYAML,我会得到以下信息
>>> list(yaml.load_all(open('index.yml')))
[{'meta-info-1': 'val1', 'meta-info-2': 'val2'}, 'Plain text/markdown content! jhaha']
我在这里想要实现的是 yaml 文件应该包含两个文档,第二个应该被解释为单个字符串文档,更具体地说,任何带有 markdown 格式的大文本正文。我不希望它被解析为 YAML 语法。
在上面的示例中,PyYAML 将第二个文档作为单个字符串返回。但是,如果第二个文档有一个:
字符代替!
例如,我会收到语法错误。这是因为 PyYAML 正在解析该文档中的内容。
有没有办法告诉 PyYAML 第二个文档只是一个原始字符串而不是解析它?
编辑:那里有一些很好的答案。虽然使用引号或文字语法解决了上述问题,但我希望用户能够编写纯文本而无需任何额外的麻烦。只需三个-
(或.
)并写下一大段纯文本。其中也可能包括引号。所以,我想知道我是否可以告诉 PyYAML 只解析一个文档,然后将第二个文档直接提供给我。
Eidt 2:因此,适应 agf 的想法,而不是使用 try/except 作为第二个文档可能是有效的 yaml 语法,
config_content, body_content = open(filename).read().split('\n---')
config = yaml.loads(config_content)
body = yaml.loads(body_content)
谢谢agf。