如果要更改yaml.dump的输出,可以使用tranform关键字参数。文档:https://yaml.readthedocs.io/en/latest/example.html
这里是Yaml数据:
metadata:
name: name
alias: alias
它存储在变量x中。
x = 'metadata:\n name: name\n alias: alias\n'
def tr(s):
return s.replace('\n', '\n ') # Want 4 space at each new line
from ruamel.yaml import YAML
from ruamel.yaml.compat import StringIO
yaml = YAML(typ="safe")
yaml.default_flow_style = False
stream = StringIO()
obj = yaml.load(x)
yaml.dump(obj, stream, transform=tr)
print(stream.getvalue())
在python脚本上运行时,出现此错误:TypeError:需要一个类似字节的对象,而不是'str'
预期输出:
metadata:
name: name
alias: alias
注意:每行再添加4个空格
设置的版本详细信息:
Python: 3.7
ruamel.yaml: 0.15.88
好吧,我现在得到了答案。仅对StringIO有一些问题,因为YAML()始终将编码设置为utf-8(并且allow_unicode = True)更改为使用io不会带来任何好处。如果要在2.7中写入StringIO,则必须禁用utf-8编码:
即
yaml = YAML(typ="safe")
yaml.default_flow_style = False
stream = StringIO()
yaml.encoding = None
有关详细信息,请访问此票证:https://sourceforge.net/p/ruamel-yaml/tickets/271/