我有一个类似于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/

10-15 01:00