如何控制 PyYAML 对我的数据使用哪种标量形式?

2023-12-07

我有一个具有短字符串属性和长多行字符串属性的对象。我想将短字符串写为 YAML 带引号的标量,将多行字符串写为文字标量:

my_obj.short = "Hello"
my_obj.long = "Line1\nLine2\nLine3"

我希望 YAML 看起来像这样:

short: "Hello"
long: |
  Line1
  Line2
  Line3

我如何指示 PyYAML 执行此操作?如果我打电话yaml.dump(my_obj),它会产生类似字典的输出:

{long: 'line1

    line2

    line3

    ', short: Hello}

(不知道为什么 long 是这样的双倍行距......)

我可以指示 PyYAML 如何处理我的属性吗?我想影响顺序和风格。


爱上@lbt的方法,我得到了这个代码:

import yaml

def str_presenter(dumper, data):
  if len(data.splitlines()) > 1:  # check for multiline string
    return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
  return dumper.represent_scalar('tag:yaml.org,2002:str', data)

yaml.add_representer(str, str_presenter)

# to use with safe_dump:
yaml.representer.SafeRepresenter.add_representer(str, str_presenter)

它使每个多行字符串都是块文字。

我试图避免猴子修补部分。 完全归功于@lbt 和@J.F.Sebastian。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何控制 PyYAML 对我的数据使用哪种标量形式? 的相关文章

随机推荐