Ruyaml:可以定义线宽吗



当使用ruyaml转储到文件时,是否可以设置YAML线宽?

当用pyyaml将一个YAML对象转储到文件中,并且其内容相当长,为82+(或类似字符(时,会插入一个换行符。这可以通过给出参数"0"来避免;宽度";转储函数,在这里你可以给出一个特定的长度,或者如下面的例子";inf";。

这种可能性在鲁亚姆尔似乎不见了。

Traceback (most recent call last):
File "/home/anton/work/repos/identityhub/bug.py", line 19, in <module>
ruamel.dump(ruamel_content, ruamel_out.open("w"), width=float("inf"))
TypeError: dump() got an unexpected keyword argument 'width'

PS。还添加了ruamel.yaml示例,以验证它不是ruyaml分叉中的问题。

from pathlib import Path
from ruyaml import YAML as RUYAML
from ruamel.yaml import YAML as RUAMEL
import yaml
ruyaml = RUYAML()
ruamel = RUAMEL()
ruyaml.indent(mapping=2, sequence=4, offset=2)
file_path = Path("test.yaml")
ruyaml_out = Path("ruyaml.yaml")
ruamel_out = Path("ruamel.yaml")
yaml_out = Path("yaml.yaml")
ruyaml_content = ruyaml.load(file_path)
ruyaml.dump(ruyaml_content, ruyaml_out.open("w"))
ruamel_content = ruamel.load(file_path)
ruamel.dump(ruamel_content, ruamel_out.open("w"))
yaml_content = yaml.load(file_path.open())
yaml.dump(yaml_content, yaml_out.open("w"), width=float("inf"))

采样YAML以查看效果:

Foo:
Bar: A very long string A very long string A very long string A very long string A

您应该使用:

yaml = YAML()
yaml.width = 2 ** 32

虽然float("inf") > 2给出了True,并且yaml.width值当前用于比较,但我不能保证在某个时刻内部代码需要一个实际的整数。自从做了int(float"inf"))会给你

OverflowError: cannot convert float infinity to integer

除非转换为int时发现异常,否则您的代码将无法再工作。

在"宽度";YAML实例上的成员变量似乎具有与将width=X发送到PyYaml转储函数相同的效果。

yaml = YAML()
yaml.width = float("inf")

最新更新