我想解析 yaml 文档,如下所示:
meta-info-1: val1
meta-info-2: val2
---
Plain text/markdown content!
jhaha
If I 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 第二个文档只是一个原始字符串而不是解析它?
Edit: 那里有一些很好的答案。虽然使用引号或文字语法解决了上述问题,但我希望用户能够编写纯文本,而不会产生任何额外的麻烦。就这三个-
's (or .
's)并写下大量纯文本。其中也可能包含引号。所以,我想知道是否可以告诉 PyYAML 仅解析一个文档,并将第二个文档提供给我。
Edit 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。