我有一个具有短字符串属性和长多行字符串属性的对象。我想将短字符串写为 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(使用前将#替换为@)