gpt4 book ai didi

yaml - 用注释美化 YAML

转载 作者:行者123 更新时间:2023-12-02 03:37:46 27 4
gpt4 key购买 nike

1。摘要

我找不到如何自动美化我的 YAML 文件。


2。数据

示例:

    我有 SashaPrettifyYAML.yaml 文件:

sasha_commands:
# Sasha comment
sasha_command_help: {call: sublime.command_help, caption: 'Sasha Command: Command Help'}

3。预期行为

我想删除{大括号}:

sasha_commands:
# Sasha comment
sasha_command_help:
call: sublime.command_help
caption: 'Sasha Command: Command Help'

4。没有帮助

  1. Pretty YAML (基于 PyYAML )和在线格式化程序 YAML FormatterOnlineYAMLTools删除评论;
  2. 我在ruamel.yaml.cmd中找不到所需的选项;
  3. align-yaml对齐,而不是美化 YAML 文件。

最佳答案

ruamel.yaml.cmd中没有选项可以执行此操作,但是使用一个小型Python程序并使用ruamel.yaml来执行此操作相当简单,通过以往返模式(默认)加载和转储。

您需要做的唯一一件事是确保数据结构上的流样式(即键 sasha_command_help 的值)设置为 block 样式(这就是我解释您的方式) “美化 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)

这将准确地给出您期望的输出。

可以在 ruamel.yaml 源中的 scalarstring.py 中找到递归数据结构 Walker,并对其进行修改以制作通用的“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,您将不会看到任何变化。但是,如果您使用了双引号标量,那么该行将确保保留双引号。

关于yaml - 用注释美化 YAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49608717/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com