繁体   English   中英

YAML中序列中的多行

[英]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 中将其加载到变量datadata['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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM