Python YAML保留换行符而不添加额外的换行符

Art*_*hur 6 python yaml

我对这个问题有类似的问题,我需要在YAML映射值字符串中插入换行符,而不想插入\n自己.答案建议使用:

Data: |
      Some data, here and a special character like ':'
      Another line of data on a separate line
Run Code Online (Sandbox Code Playgroud)

代替

Data: "Some data, here and a special character like ':'\n
      Another line of data on a separate line"
Run Code Online (Sandbox Code Playgroud)

这也增加了一个新行,即是不可接受的.

我尝试使用Data: >但显示出完全不同的结果.我在读完yaml文件后一直在剥离最终换行符,当然这样可行,但这并不优雅.有没有更好的方法来保留换行符而不在末尾添加额外的换行符?

我正在使用python 2.7 fwiw

Ant*_*hon 7

如果使用,则将|标量转换为文字块样式标量.但是,默认行为|是剪切,并没有得到你想要的字符串(因为它留下了最后的换行符).

您可以|通过附加块咀嚼指示符来"修改"行为

跳闸

剥离由" - "扼流指示器指定.在这种情况下,最终换行符和任何尾随空行都会从标量内容中排除.

如果未指定显式的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)
Run Code Online (Sandbox Code Playgroud)

得到:

{'数据':"某些数据,此处和特殊字符如':'\n另一行上的另一行数据"}


¹ 这是使用ruamel.yaml完成的,我是作者.你应该得到与PyYAML相同的结果(其中ruamel.yaml是一个超集,保留了往返的注释和文字标量块).