yaml.dump中的转换属性不起作用

问题描述 投票:0回答:1

如果要更改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
python-3.x pyyaml ruamel.yaml
1个回答
0
投票

好吧,我现在得到了答案。仅对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/

© www.soinside.com 2019 - 2024. All rights reserved.