防止长行被包裹在 ruamel.yaml

Posted

技术标签:

【中文标题】防止长行被包裹在 ruamel.yaml【英文标题】:Prevent long lines getting wrapped in ruamel.yaml 【发布时间】:2017-06-29 11:17:04 【问题描述】:

我使用load_yaml_guess_indent(f, preserve_quotes=True) 读取 YAML 文件,然后对其进行修改并将其写回。我注意到当它们被写回时,长线被包裹起来。 (在 80-85 个字符后插入换行符。)是否可以传递一个参数来阻止这种情况发生?

【问题讨论】:

【参考方案1】:

这些是你可以交给round_trip_dump()的参数:

def round_trip_dump(data, stream=None, Dumper=RoundTripDumper,
                default_style=None, default_flow_style=None,
                canonical=None, indent=None, width=None,
                allow_unicode=None, line_break=None,
                encoding=enc, explicit_start=None, explicit_end=None,
                version=None, tags=None, block_seq_indent=None,
                top_level_colon_align=None, prefix_colon=None):

你要找的是width

如果您使用的是新的 (ruamel.yaml >= 0.15) API,这些参数中的大多数会直接转换为您创建的 YAML 实例上的属性,所以在这种情况下,您可以这样做:

yaml = ruamel.yaml.YAML()
yaml.width = 4096  # or some other big enough value to prevent line-wrap
yaml.dump(data, stream=your_stream)

【讨论】:

@KatrinaBrock 完成 @JeffHykin 那是因为线宽(整数)与提供的值进行比较,并且该值没有“转换”为整数。 IE。在 Python 中 80 < float("Infinity") 给出 Trueint(float("Infinity")) 抛出溢出错误。

以上是关于防止长行被包裹在 ruamel.yaml的主要内容,如果未能解决你的问题,请参考以下文章

Python之ruamel.yaml模块详解| ruamel.yaml与pyyaml的区别

Python之ruamel.yaml模块详解

ruamel.yaml的使用

为啥标签没有被包裹在 div 中? [复制]

通过 ruamel.yaml 转储时如何在 yaml 文件中保留空值

如何在 Python 中使用 ruamel.yaml 从 YAML 文件中获取注释?