如何使用 PyYaml 或 Ruamel.yaml 仅转储具有 flow_style 的列表
How to dump only lists with flow_style with PyYaml or Ruamel.yaml
我有以下内容:
data = {"values": list(range(3)),'some_key': {'value': 2, 'unit': 'm'}}
当我使用 default_flow_style=True
将此字典转储到 YAML 时,我得到以下内容:
>>> print(yaml.dump( data, default_flow_style=False))
some_key:
unit: m
value: 2
values:
- 0
- 1
- 2
>>> print(yaml.dump( data, default_flow_style=True))
{some_key: {unit: m, value: 2}, values: [0, 1, 2]}
>>> print(yaml.dump( data, default_flow_style=None))
some_key: {unit: m, value: 2}
values: [0, 1, 2]
我想转储这个字典,将 values
与 flow_style 保持一致(就像使用 default_flow_style=None
和 default_flow_style=True
执行时一样,但保持 [=18= 的行为] 与使用 default_flow_style=False
.
时完全相同
有可能实现吗?
使用 PyYAML 5.3.1
如果不更改作为转储程序一部分的表示器,则无法使用 PyYAML 实现该目标。
在 ruamel.yaml 中,您可以将一个节点标记为以流模式转储,然后“低于”的所有内容也将转储为 flow-mode(必须是):
import sys
import ruamel.yaml
def flist(x):
retval = ruamel.yaml.comments.CommentedSeq(x)
retval.fa.set_flow_style() # fa -> format attribute
return retval
data = {"values": flist(range(3)),'some_key': {'value': 2, 'unit': 'm'}}
yaml = ruamel.yaml.YAML()
yaml.dump(data, sys.stdout)
给出:
values: [0, 1, 2]
some_key:
value: 2
unit: m
您首先获得 values
密钥,因为它在 data
的定义中位于第一个(假设您使用的是 up-to-date Python 3)
我有以下内容:
data = {"values": list(range(3)),'some_key': {'value': 2, 'unit': 'm'}}
当我使用 default_flow_style=True
将此字典转储到 YAML 时,我得到以下内容:
>>> print(yaml.dump( data, default_flow_style=False))
some_key:
unit: m
value: 2
values:
- 0
- 1
- 2
>>> print(yaml.dump( data, default_flow_style=True))
{some_key: {unit: m, value: 2}, values: [0, 1, 2]}
>>> print(yaml.dump( data, default_flow_style=None))
some_key: {unit: m, value: 2}
values: [0, 1, 2]
我想转储这个字典,将 values
与 flow_style 保持一致(就像使用 default_flow_style=None
和 default_flow_style=True
执行时一样,但保持 [=18= 的行为] 与使用 default_flow_style=False
.
有可能实现吗?
使用 PyYAML 5.3.1
如果不更改作为转储程序一部分的表示器,则无法使用 PyYAML 实现该目标。
在 ruamel.yaml 中,您可以将一个节点标记为以流模式转储,然后“低于”的所有内容也将转储为 flow-mode(必须是):
import sys
import ruamel.yaml
def flist(x):
retval = ruamel.yaml.comments.CommentedSeq(x)
retval.fa.set_flow_style() # fa -> format attribute
return retval
data = {"values": flist(range(3)),'some_key': {'value': 2, 'unit': 'm'}}
yaml = ruamel.yaml.YAML()
yaml.dump(data, sys.stdout)
给出:
values: [0, 1, 2]
some_key:
value: 2
unit: m
您首先获得 values
密钥,因为它在 data
的定义中位于第一个(假设您使用的是 up-to-date Python 3)