我已经搜索过了,但找不到如何使用新的API强制ruamel.yaml以块的方式转储我的字典。
我的代码:
yaml = YAML(typ="safe")
yaml.Representer = RoundTripRepresenter
yaml.default_flow_style = False ### also tried with None
perfdata: dict[datetime, dict[int, float]] = {}
performance_file = opts.mapdir / "performance.yaml"
if performance_file.exists():
make_backup(performance_file)
with performance_file.open("rt") as fin:
perfdata = yaml.load(fin)
perfdata[datetime.now().astimezone()] = normalized_time_per_row
with performance_file.open("wt") as fout:
yaml.dump(perfdata, fout)
我试过了
- 将
default_flow_style=None
放入.dump()
调用中--错误意外的关键字参数 yaml.default_flow_style = None
--仍然会导致流样式yaml.default_flow_style = False
--仍然会导致流样式
如何强制它以块样式发射?
1条答案
按热度按时间nle07wnf1#
你在混合事物,不清楚你从哪里得到的想法,你做他们的方式(这将是有趣的,知道你从哪里得到的例子)。仅仅更改
YAML(typ="safe")
示例上的表示器不会得到匹配的序列化器和发射器。你可以做的,但在这种情况下不需要的是有两个YAML()
示例:这将使您在
yaml_out
中获得正确的序列化器和发射器,有效地删除注解并将文件内容转换为块样式。如果你做了一个往返并保留注解,你根本不应该使用
typ="safe"
,而应该使用默认值(或者使用显式的typ="rt"
,如果默认使用块样式。如果您的
performance.yaml
文件只包含与例程一起输入的条目,则可以使用YAML(typ="safe")
并在其上设置default_flow_style属性。其给出:
所以在这两种情况下都得到block_style输出。如果您已经有(旧的)流样式条目,请使用
typ="safe"
。您可以在往返加载器/转储器上设置.default_flow_style
,但它不会影响已加载数据,只会影响新添加的dicts和列表,对于typ='rt'
,流/块样式将保留,并且必须针对每个对象进行更改。您应该开始使用
pathlib.Path
示例,它们可以防止您错误地打开/关闭文件。例如,yaml.dump()
转储为UTF-8,这是一个二进制流。因此,使用"wt"
会导致不必要的转换步骤。