如何解决如何使用PyYaml或Ruamel.yaml仅转储带有flow_style的列表
我具有以下内容:
| prnt_id | sub_id | ac_nm | cost | units |
| ------- | ------ | -------- | ----- | ----- |
| 123 | abc01 | abc corp | 34500 | 24 |
| 456 | abc02 | xyz corp | 9800 | 10 |
| 856 | abc03 | jfk corp | 9820 | 12 |
当我使用data = {"values": list(range(3)),'some_key': {'value': 2,'unit': 'm'}}
将此字典转储到YAML时,我得到了以下内容:
default_flow_style=True
我想转储该命令,使>>> 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,2]
保持flow_style(就像使用values
和default_flow_style=None
执行时一样,但保持default_flow_style=True
的行为与使用{ {1}}。
有可能实现这一目标吗?
使用PyYAML 5.3.1
解决方法
如果不更改转储程序中的表示形式,则无法使用PyYAML达到该目标。
在ruamel.yaml中,您可以将一个节点标记为以流模式进行转储,然后将所有“以下”的内容也转储为流模式(必须):
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
的定义中位于第一位(假设您使用的是最新的Python 3)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。