我无法找到,如何自动美化我的YAML文件。
示例:
我有SashaPrettifyYAML.yaml
个文件:
sasha_commands:
# Sasha comment
sasha_command_help: {call: sublime.command_help, caption: 'Sasha Command: Command Help'}
我想删除{braces}:
sasha_commands:
# Sasha comment
sasha_command_help:
call: sublime.command_help
caption: 'Sasha Command: Command Help'
答案 0 :(得分:2)
在ruamel.yaml.cmd
中没有选项可以做到这一点,但使用小型python程序并使用ruamel.yaml
,通过在往返模式下加载和转储(默认情况下)来完成此操作非常简单)。
您唯一需要做的就是确保数据结构上的流式样式(即密钥sasha_command_help
的值)设置为块样式(这就是我如何解释您的定义“美化YAML“):
import sys
import ruamel.yaml
yaml_str = """\
sasha_commands:
# Sasha comment
sasha_command_help: {call: sublime.command_help, caption: 'Sasha Command: Command Help'}
"""
yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
data = yaml.load(yaml_str)
data['sasha_commands']['sasha_command_help'].fa.set_block_style()
yaml.dump(data, sys.stdout)
这将完全给出您期望的输出。
递归数据结构walker可以在scalarstring.py
源代码的ruamel.yaml
中找到,并且适用于制作通用的“make-everything-block-style”例程:
import sys
import ruamel.yaml
def block_style(base):
"""
This routine walks over a simple, i.e. consisting of dicts, lists and
primitives, tree loaded from YAML. It recurses into dict values and list
items, and sets block-style on these.
"""
if isinstance(base, dict):
for k in base:
try:
base.fa.set_block_style()
except AttributeError:
pass
block_style(base[k])
elif isinstance(base, list):
for elem in base:
try:
base.fa.set_block_style()
except AttributeError:
pass
block_style(elem)
yaml = ruamel.yaml.YAML()
yaml.preserve_quotes = True
file_in = sys.argv[1]
file_out = sys.argv[2]
with open(file_in) as fp:
data = yaml.load(fp)
block_style(data)
with open(file_out, 'w') as fp:
yaml.dump(data, fp)
如果您将上述内容存储在prettifyyaml.py
中,则可以使用以下方式进行调用:
python prettifyyaml.py SashaPrettifyYAML.yaml Prettified.yaml
由于您已经在具有嵌入空格的标量周围使用单引号,因此如果省略yaml.preserve_quotes = True
,则不会看到更改。但是如果你使用了双引号标量,则该行确保保留双引号。
答案 1 :(得分:1)
我有同样的问题。我编写了自己的YAML美化工具https://github.com/wangkuiyi/yamlfmt。希望对您有所帮助。
我尝试了Google的最高结果,但是没有一个能满足我所领导的https://sqlflow.org/sqlflow的要求:
答案 2 :(得分:1)
您可以使用yq工具-它易于安装和使用,并且维护良好。
假设您有example.yml
格式的文件,可以通过以下方式进行处理:
yq r --unwrapScalar -p pv -P example.yml '*'
cat example.yml | yq r --unwrapScalar -p pv -P - '*'