当使用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")