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

Transform attribute in yaml.dump is not working

如果我们想改变 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/