如何在Python中将折叠标量转储到YAML(使用ruamel?)

2024-10-01 04:55:44 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在搜索stackoverflow,寻找一种使用Python转储YAML格式的折叠标量的方法。一个常见的answer来自建议使用他的ruamelpython库的用户Anthon。但是我不能用Python的方式把一个long值转储出来。在

在Anthon的答案中,他/她经常使用带有折叠样式representer“>;”的硬编码字符串来说明他的观点:

yaml_str = """\
long: >
  Line1
  Line2
  Line3
"""
data = yaml.load(yaml_str, Loader=yaml.RoundTripLoader)
print(yaml.dump(data, Dumper=yaml.RoundTripDumper))

我不知道如何从我的代码中把它从我的代码中转换成一个“我不知道怎么把它从我的代码中转换成”的。在

我是不是真的要做这样的事情:

^{pr2}$

否则,对于长unicode字符串变量,如何使用ruamel将其转储到文件中?在


Tags: 方法字符串代码answeryamldata格式stackoverflow
1条回答
网友
1楼 · 发布于 2024-10-01 04:55:44

从0.15.61开始,可以在拉梅尔亚姆勒公司名称:

import sys
import ruamel.yaml

yaml_str = """\
long: >
  Line1
  Line2
  Line3
"""

yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
print(type(data['long']), data['long'].fold_pos, end='\n  -\n')
yaml.dump(data, sys.stdout)

它给出了:

^{pr2}$

打印的字体只是为了展示你如何建立 如果从头开始工作,你自己要创建什么对象:

from ruamel.yaml.scalarstring import FoldedScalarString as folded

s = folded('Line1 Line2 Line3\n')
data = dict(long=s)
yaml.dump(data, sys.stdout)

这将给出折叠标量,但可能不是您想要的方式:

long: >
  Line1 Line2 Line3

要使其折叠,必须提供.fold_pos属性。那个 属性必须是具有位置的列表(或某种可逆转的iterable) 字符串中需要插入折叠的空格字符:

s = folded('Line1 Line2 Line3\n')
s.fold_pos = [5, 11]
data = dict(long=s)
yaml.dump(data, sys.stdout)

返回预期的输出:

long: >
  Line1
  Line2
  Line3

由于您似乎希望折叠所有空间,您还可以执行以下操作:

import re
s.fold_pos = [x.start() for x in re.finditer(' ', s)]

相关问题 更多 >