我有一个类似于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.7fwiw
最佳答案
如果使用|
这将使标量变为literal block style scalar。但是,|
的默认行为是剪切,这不会得到您想要的字符串(因为这样会留下最后一行)。
通过附加block chomping indicators
条
剥离由“—”chomping指示器指定。在这种情况下,最后的换行符和任何尾随的空行都从标量的内容中排除。
削减
如果未指定显式chomping指示器,则使用剪切作为默认行为。在这种情况下,最后一个换行符保留在标量的内容中。但是,任何尾随的空行都从标量的内容中排除。
保持
保留由“+”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)
给予:
'data':“一些数据,这里和一个特殊字符,如':'\n另一行数据在另一行”
这是用我是作者的ruamel.yaml来完成的。您应该使用pyyaml得到相同的结果(其中ruamel.yaml是一个超集,在往返过程中保留注释和文本标量块)。
关于python - Python YAML保留换行符而不添加额外的换行符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31022588/