如何让 python ruamel 保留长字符串?
How can I make python ruaml preserve long strings as is?
我正在使用 ruamel.yaml 进行往返 load/dump,但在一些包含手工制作的字符串的文件上,我想保留它们。有时这很好,因为格式实际上很漂亮(可读性),或者 copy/paste 能力。
这是我的代码:
from ruamel.yaml import YAML
import sys
yaml = YAML()
i = """
mydict:
command: "my_shell_script
--firstarg
--second
--third
.......
fourth
"
"""
data = yaml.load(i)
yaml.dump(data, sys.stdout)
输出
mydict:
command: 'my_shell_script --firstarg --second --third ....... fourth '
我不希望它更改这些行。我熟悉 yaml.width
选项,但我根本不想设置它! (高或低)。
如何使 ruamel.yaml 像这样保留标量的格式?跟PreservedScalarString
有关系吗?我可以这样做,只保留某些标量吗?
你可以钩入双引号标量字符串loading/construction,你
可能必须设置 yaml.preserve_quotes
,然后才能正常运行
就像折叠标量的装载机。
但是首先使用 YAML 的折叠标量要容易得多,因为
看起来很像您的输入,开箱即用。并且唯一不同的是
加载值,因为没有尾随 space(我希望不是
显着):
import sys
import ruamel.yaml
yaml_str = """
mydict:
command: "my_shell_script
--firstarg
--second
--third
.......
fourth
"
altdict:
command: >-
my_shell_script
--firstarg
--second
--third
.......
fourth
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
for k in data:
print(repr(data[k]['command']))
yaml.dump(data, sys.stdout)
给出:
'my_shell_script --firstarg --second --third ....... fourth '
'my_shell_script --firstarg --second --third ....... fourth'
mydict:
command: 'my_shell_script --firstarg --second --third ....... fourth '
altdict:
command: >-
my_shell_script
--firstarg
--second
--third
.......
fourth
如您所见,折叠的标量转储作为输入。
如果您从 >-
中保留 -
,您将在加载的数据末尾得到一个(单个)换行符。
我正在使用 ruamel.yaml 进行往返 load/dump,但在一些包含手工制作的字符串的文件上,我想保留它们。有时这很好,因为格式实际上很漂亮(可读性),或者 copy/paste 能力。
这是我的代码:
from ruamel.yaml import YAML
import sys
yaml = YAML()
i = """
mydict:
command: "my_shell_script
--firstarg
--second
--third
.......
fourth
"
"""
data = yaml.load(i)
yaml.dump(data, sys.stdout)
输出
mydict:
command: 'my_shell_script --firstarg --second --third ....... fourth '
我不希望它更改这些行。我熟悉 yaml.width
选项,但我根本不想设置它! (高或低)。
如何使 ruamel.yaml 像这样保留标量的格式?跟PreservedScalarString
有关系吗?我可以这样做,只保留某些标量吗?
你可以钩入双引号标量字符串loading/construction,你
可能必须设置 yaml.preserve_quotes
,然后才能正常运行
就像折叠标量的装载机。
但是首先使用 YAML 的折叠标量要容易得多,因为 看起来很像您的输入,开箱即用。并且唯一不同的是 加载值,因为没有尾随 space(我希望不是 显着):
import sys
import ruamel.yaml
yaml_str = """
mydict:
command: "my_shell_script
--firstarg
--second
--third
.......
fourth
"
altdict:
command: >-
my_shell_script
--firstarg
--second
--third
.......
fourth
"""
yaml = ruamel.yaml.YAML()
data = yaml.load(yaml_str)
for k in data:
print(repr(data[k]['command']))
yaml.dump(data, sys.stdout)
给出:
'my_shell_script --firstarg --second --third ....... fourth '
'my_shell_script --firstarg --second --third ....... fourth'
mydict:
command: 'my_shell_script --firstarg --second --third ....... fourth '
altdict:
command: >-
my_shell_script
--firstarg
--second
--third
.......
fourth
如您所见,折叠的标量转储作为输入。
如果您从 >-
中保留 -
,您将在加载的数据末尾得到一个(单个)换行符。