[英]Multi-line in a sequence in YAML
我想在 YAML 中按顺序排列多行。 我就是这样做的,但是我在用 python 解析它时遇到了问题:
Element: |
- multiple lines
come here
这样做,当我用Python解析它时,我仍然在解析的数据中看到-
。 似乎YAML 不明白这是一个列表。
您的输入不是列表,YAML 只知道映射(构造为 Python dict
和序列(构造为 Python list
)。
通常-
是块序列条目指示符,但是由于您在第一行开始块样式文字作为键Element
的值,因为|
,它后面的所有缩进都是这个标量的一部分(构造为 Python 字符串)。
您想要做的是将指标置于文字标量之外:
Element:
- |
multiple lines
come here
如果您在 Python 中将其加载到变量data
则data['Element'][0]
将是字符串'multiple lines\\ncome here\\n'
。 也就是说:文字标量中的每个换行符都将是字符串中的换行符,并且该字符串上将有一个最终换行符,与后面有多少空行无关(这是剪辑)。 如果您希望结尾没有换行符,请使用|-
(剥离),如果您希望所有换行符直到缩进,则使用|+
(保留)。 这些添加到|
被称为咀嚼指标。
如果您在名为input.yaml
的文件中有上述input.yaml
:
import sys
from pathlib import Path
import ruamel.yaml
input = Path('input.yaml')
yaml = ruamel.yaml.YAML(typ='safe')
data = yaml.load(input)
print(f'{data["Element"][0]!r}') # print the representation, so you can see where the newlines are
这使:
'multiple lines\ncome here\n'
使用此语法(至少对于yaml
Python 包)
stuff:
- 'this is a multiline
string'
换句话说,引用字符串并取消缩进它的延续。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.