我有一个与this question类似的问题,我需要在YAML映射值字符串中插入换行符,而不想自己插入\n
。答案建议使用:
Data: |
Some data, here and a special character like ':'
Another line of data on a separate line
而不是
Data: "Some data, here and a special character like ':'\n
Another line of data on a separate line"
还在最后添加了新行 ,这是不可接受的。
我尝试使用Data: >
,但这显示出完全不同的结果。我在读完yaml文件后一直在剥离最终换行符,当然这样可行,但这并不优雅。有没有更好的方法来保留换行而不在最后添加额外的?
我正在使用python 2.7 fwiw
答案 0 :(得分:7)
如果您使用|
这会将标量变为literal block style scalar。但是|
的默认行为是剪切,并且不能获得您想要的字符串(因为它留下了最终的换行符)。
您可以通过附加block chomping indicators
来“修改”|
的行为
条
剥离由“ - ”扼流指示器指定。在这种情况下,最终换行符和任何尾随空行都会从标量内容中排除。
剪辑
如果未指定明确的chomping指示符,则剪切是使用的默认行为。在这种情况下,最终换行符将保留在标量的内容中。但是,任何尾随空行都会从标量内容中排除。
请
保持由“+”咀嚼指示器指定。在这种情况下,最后的换行符和任何尾随的空行被认为是标量内容的一部分。这些额外的线条不会折叠。
通过将stripchomping运算符“-
”添加到“|
”,可以阻止/删除最终换行符:¹
import ruamel.yaml as yaml
yaml_str = """\
Data: |-
Some data, here and a special character like ':'
Another line of data on a separate line
"""
data = yaml.load(yaml_str)
print(data)
给出:
{'数据':“有些数据,此处和特殊字符如':'\ n另一行上的另一行数据”}
¹这是使用ruamel.yaml完成的,我是作者。你应该得到与PyYAML相同的结果(其中ruamel.yaml是一个超集,在往返时保留注释和文字标量块)。