【问题标题】:How to set Indentation of block sequences using ruamel-yaml如何使用 ruamel-yaml 设置块序列的缩进
【发布时间】:2020-09-22 10:35:02
【问题描述】:

我正在使用 ruamel-yaml 编写代码来读取 YAML 文件、添加内容并写回 YAML。

转储 YAML 时,我无法将缩进设置为顶级映射

我的 YAML 的样子(这是旧 YAML 在编辑前的样子):

Device:
      Name: "ABC"
      Version: "0.2.1"
      Year: "2011"
      Array: [[1,2],
        [3,4],[5,6],
         [7,8]]

但是,我希望 YAML 看起来像:

Device:
      Name     : "ABC"
      Version  : "0.2.1"
      Year     : "2011"
      Array    : [[1,2],
                 [3,4],[5,6],
                 [7,8]]

我希望所有引号都在同一行,并且值恰好在引号的右侧:

我的代码:

yaml= ruamel.yaml.YAML()

yaml.top_level_colon_align = True

with open('text1.yaml', 'w') as fp:
    round_trip_dump(yaml_content, fp, indent=5, block_seq_indent=3)

我做错了什么吗?

【问题讨论】:

  • 您的帖子中的yaml 格式有误。
  • 我没明白你的意思? @jizhihaoSAMA
  • 我已经测试了你的 yaml 示例,当我尝试加载它时会引发异常。
  • 你的意思是代码示例吗?
  • 不是代码,是你发的yaml。看来Array是错的。

标签: python yaml pyyaml ruamel.yaml


【解决方案1】:

ruamel.yaml 无法做到这一点,它可以为您提供对齐的冒号和值,但仅限于数据结构的顶层 (yaml.toplevel_colon_align = True)。 IIRC 不能轻易地将相同的机制应用于嵌套映射,因为如果可以的话,我不会将其限制在顶层。

除了线宽,没有办法控制多线流式顺序。在加载过程中 no 跟踪流式复杂节点内的换行符。这可以完成(例如,在多行文字/折叠标量中完成。

如果同时实现了在流式节点中跟踪换行符以及嵌套对齐,则更有可能在序列中输出对齐的元素:

  .
  .
  Array    : [[1,2],
              [3,4],[5,6]
              [7,8]]

实现这一点并非易事(作为新功能,但肯定是当前实现的子类)

【讨论】:

  • 您好,感谢您的意见。我们可以把所有的冒号放在一行吗?
猜你喜欢
  • 2020-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多