我正在尝试使用yaml.dump
和pyyaml将字符串转换为yaml安全的东西(即,所有需要转义的东西都被正确转义)。然后我将这些字符串插入到一个大的yaml文档中。
问题是yaml.dump
希望将字符串视为整个文档,并添加...
(文档末尾),例如
In [4]: yaml.dump("a string")
Out[4]: 'a string\n...\n'
除了手动删除之外,如何才能添加\n...\n
?或者是否有更好的方法来引用使用pyyaml消耗yaml的字符串?
答案 0 :(得分:4)
提供default_style
参数似乎在某种程度上有所帮助:
>>> yaml.dump("a string", default_style='"')
'"a string"\n'
还有一个line_break
参数,但它适用于更改终止换行符:
>>> yaml.dump("a string", default_style='"', line_break="\r")
'"a string"\r'
...它似乎无法删除:
>>> yaml.dump("a string", default_style='"', line_break="")
'"a string"\n'
>>> yaml.dump("a string", default_style='"', line_break=None)
'"a string"\n'
>>> yaml.dump("a string", default_style='"', line_break=False)
'"a string"\n'
答案 1 :(得分:3)
如果你想在包含评论的yaml文档中添加内容,你应该看ruamel.yaml(我是作者)。它是PyYAML的增强,它保留了YAML文件中的注释。
这样,如果你想在这个input.yml
文件中添加一些内容:
- alpha # first one
- beta # another one
你可以这样做:
# coding: utf-8
import ruamel.yaml
file_name = 'input.yml'
config = ruamel.yaml.load(open(file_name), ruamel.yaml.RoundTripLoader)
config.append('ω')
ruamel.yaml.dump(config, open('output.yml', 'w'),
Dumper=ruamel.yaml.RoundTripDumper)
ruamel.yaml.dump(config, open('unicode.yml', 'w'), allow_unicode=True,
Dumper=ruamel.yaml.RoundTripDumper)
并进入output.yml
(我认为你称之为正确的逃避):
- alpha # first one
- beta # another one
- "\u03C9"
和unicode.yml
:
- alpha # first one
- beta # another one
- ω
请注意,评论会被保留,例如PyYAML不行。 也可以在附加元素中添加注释。