您希望将 Python 列表输出为多行纯标量,并且
会很艰难。通常一个列表是输出一个 YAML 序列,它
有破折号(-,块样式,多行)或使用
方括号([],流式,一行或多行。
带有破折号的块样式:
import sys
from ruamel.yaml import YAML
data = ["test1", "test2", "test3"]
yaml = YAML()
yaml.dump(data, sys.stdout)
给予:
- test1
- test2
- test3
流动风格,在一条窄线上:
yaml = YAML()
yaml.default_flow_style = True
yaml.dump(data, sys.stdout)
输出:
流式,变窄:
[test1, test2, test3]
yaml = YAML()
yaml.default_flow_style = True
yaml.width = 5
yaml.dump(data, sys.stdout)
让你:
[test1,
test2,
test3]
这不太可能是您想要的,因为它会影响整个 YAML 文档,
你仍然得到方括号。
另一种方法是将字符串转换为纯标量。这是
实际上,您想要的输出将被加载为。
yaml_str = """\
test_1
test_2
test_3
"""
yaml = YAML()
x = yaml.load(yaml_str)
assert type(x) == str
assert x == 'test_1 test_2 test_3'
加载您的预期输出通常是一个很好的测试,可以查看您的内容
需要提供。
因此,您必须将列表转换为多字
细绳。再一次的问题是你只能强制这条线
通过设置
文档,并且大多数文件的最小宽度大于 4
(虽然可以修补但不能解决问题
这适用于整个文档)。
yaml = YAML()
yaml.width = 5
s = ' '.join(data)
yaml.dump(s, sys.stdout)
结果:
test1 test2
test3
...
如果您真的不想要破折号,这将是 IMO 的最佳解决方案:
使用literal block style
scalar(字符串):
from ruamel.yaml.scalarstring import PreservedScalarString
yaml = YAML()
s = PreservedScalarString('\n'.join(data) + '\n')
yaml.dump(s, sys.stdout)
保留标量样式的换行符:
|
test1
test2
test3