Ruyaml:可以定义线宽吗?
Ruyaml: Possible to define line width?
当使用 ruyaml 转储到文件时,是否可以设置 YAML 行宽?
当使用 pyyaml 将 YAML 对象转储到文件并且其内容相当长 82+(或类似的)字符时,会插入一个换行符。这可以通过为转储函数提供参数“width”来规避,您可以在其中提供特定长度或如下例所示“inf”。
ruyaml 中似乎缺少这种可能性。
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 实例上的“宽度”成员变量,似乎与将 width=X
发送到 PyYaml 转储函数具有相同的效果。
yaml = YAML()
yaml.width = float("inf")
你应该使用:
yaml = YAML()
yaml.width = 2 ** 32
虽然float("inf") > 2
给出了True
,而yaml.width
值目前是用来比较的,我不能保证在某些时候内部代码需要一个实际的整数。自从做了 int(float"inf"))
会给你
OverflowError: cannot convert float infinity to integer
除非转换为 int 时捕获到该异常,否则您的代码将不再有效。
当使用 ruyaml 转储到文件时,是否可以设置 YAML 行宽?
当使用 pyyaml 将 YAML 对象转储到文件并且其内容相当长 82+(或类似的)字符时,会插入一个换行符。这可以通过为转储函数提供参数“width”来规避,您可以在其中提供特定长度或如下例所示“inf”。
ruyaml 中似乎缺少这种可能性。
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 实例上的“宽度”成员变量,似乎与将 width=X
发送到 PyYaml 转储函数具有相同的效果。
yaml = YAML()
yaml.width = float("inf")
你应该使用:
yaml = YAML()
yaml.width = 2 ** 32
虽然float("inf") > 2
给出了True
,而yaml.width
值目前是用来比较的,我不能保证在某些时候内部代码需要一个实际的整数。自从做了 int(float"inf"))
会给你
OverflowError: cannot convert float infinity to integer
除非转换为 int 时捕获到该异常,否则您的代码将不再有效。