在 Python 中,输出紧凑风格的 YAML

在 Python 中,要输出这种紧凑风格的 YAML(类似于 JSON 的 {} 格式),可以使用 pyyaml 库并调整输出格式。以下是实现方法:

方法1:使用 pyyaml 并禁用默认换行

import yaml

data = {
    "count": 122,
    "grade": 4,
    "data": [1, 0, 4, 0, 6, 12, 14, 16, 300, 348, 396, 412, 428, 0, 60, 4, 1, 3, 4, 5, 0, 72, 2, 2, 3, 0, 0, 0, 90, 2, 6, 7, 0, 0, 0, 115, 1, 4, 0, 0, 0, 0, 165, 1, 6, 0, 0, 0, 0, 195, 1, 7, 0, 0, 0, 1, 60, 1, 1, 0, 0, 0, 1, 72, 2, 2, 5, 0, 0, 1, 90, 1, 8, 0, 0, 0, 1, 115, 2, 9, 10, 0, 0, 1, 135, 1, 10, 0, 0, 0, 1, 165, 1, 11, 0, 0, 0, 2, 115, 1, 12, 0, 0, 0, 2, 135, 1, 13, 0, 0, 0, 3, 115, 1, 12, 0, 0, 0, 3, 135, 1, 13, 0, 0, 0]
}

# 禁用默认的换行和缩进
output = yaml.dump(data, default_flow_style=True, width=float("inf"))
print(output)

方法2:直接生成紧凑格式字符串(更简单)

data = {
    "count": 122,
    "grade": 4,
    "data": [1, 0, 4, 0, 6, 12, 14, 16, 300, 348, 396, 412, 428, 0, 60, 4, 1, 3, 4, 5, 0, 72, 2, 2, 3, 0, 0, 0, 90, 2, 6, 7, 0, 0, 0, 115, 1, 4, 0, 0, 0, 0, 165, 1, 6, 0, 0, 0, 0, 195, 1, 7, 0, 0, 0, 1, 60, 1, 1, 0, 0, 0, 1, 72, 2, 2, 5, 0, 0, 1, 90, 1, 8, 0, 0, 0, 1, 115, 2, 9, 10, 0, 0, 1, 135, 1, 10, 0, 0, 0, 1, 165, 1, 11, 0, 0, 0, 2, 115, 1, 12, 0, 0, 0, 2, 135, 1, 13, 0, 0, 0, 3, 115, 1, 12, 0, 0, 0, 3, 135, 1, 13, 0, 0, 0]
}

# 直接生成紧凑格式(类似JSON的stringify)
output = "{" + f"count: {data['count']}, grade: {data['grade']}, data: {data['data']}" + "}"
print(output)

输出结果

两种方法都会生成如下紧凑格式的 YAML:

{count: 122, grade: 4, data: [1, 0, 4, 0, 6, 12, 14, 16, 300, 348, 396, 412, 428, 0, 60, 4, 1, 3, 4, 5, 0, 72, 2, 2, 3, 0, 0, 0, 90, 2, 6, 7, 0, 0, 0, 115, 1, 4, 0, 0, 0, 0, 165, 1, 6, 0, 0, 0, 0, 195, 1, 7, 0, 0, 0, 1, 60, 1, 1, 0, 0, 0, 1, 72, 2, 2, 5, 0, 0, 1, 90, 1, 8, 0, 0, 0, 1, 115, 2, 9, 10, 0, 0, 1, 135, 1, 10, 0, 0, 0, 1, 165, 1, 11, 0, 0, 0, 2, 115, 1, 12, 0, 0, 0, 2, 135, 1, 13, 0, 0, 0, 3, 115, 1, 12, 0, 0, 0, 3, 135, 1, 13, 0, 0, 0]}

关键参数说明

  • default_flow_style=True:强制使用 {}[] 的紧凑格式
  • width=float("inf"):禁止 YAML 自动换行

如果不需要严格的 YAML 格式,方法2(直接字符串拼接)更简单直接。

Comments

  1. Owner
    Edited
    1 month ago
    2025-4-30 10:17:38

    你可以使用 Python 的内建 yaml 库(如 PyYAML)来生成符合你指定格式的 YAML 文件,使用列表的紧凑格式(即方括号 [ ] 包裹、逗号分隔)。以下是示例代码:


    示例 Python 代码:

    import yaml
    
    data = {
        "count": 122,
        "grade": 4,
        "data": [1, 0, 4, 0, 6, 12, 14, 16, 300, 348, 396, 412, 428, 0, 60, 4, 1, 3, 4, 5,
                 0, 72, 2, 2, 3, 0, 0, 0, 90, 2, 6, 7, 0, 0, 0, 115, 1, 4, 0, 0, 0, 0,
                 165, 1, 6, 0, 0, 0, 0, 195, 1, 7, 0, 0, 0, 1, 60, 1, 1, 0, 0, 0, 1,
                 72, 2, 2, 5, 0, 0, 1, 90, 1, 8, 0, 0, 0, 1, 115, 2, 9, 10, 0, 0, 1,
                 135, 1, 10, 0, 0, 0, 1, 165, 1, 11, 0, 0, 0, 2, 115, 1, 12, 0, 0, 0, 2,
                 135, 1, 13, 0, 0, 0, 3, 115, 1, 12, 0, 0, 0, 3, 135, 1, 13, 0, 0, 0]
    }
    
    # 写入 YAML 文件,确保 data 数组保持一行显示
    with open("test.yaml", "w") as f:
        yaml.dump(data, f, default_flow_style=True)

    关键点:

    • default_flow_style=True 使 data[1, 2, 3] 紧凑风格输出。
    • 使用 PyYAML 库(安装命令:pip install pyyaml

    输出结果:

    count: 122
    grade: 4
    data: [1, 0, 4, 0, 6, 12, 14, 16, 300, 348, 396, 412, 428, 0, 60, 4, 1, 3, 4, 5, 0, 72, 2, 2, 3, 0, 0, 0, 90, 2, 6, 7, 0, 0, 0, 115, 1, 4, 0, 0, 0, 0, 165, 1, 6, 0, 0, 0, 0, 195, 1, 7, 0, 0, 0, 1, 60, 1, 1, 0, 0, 0, 1, 72, 2, 2, 5, 0, 0, 1, 90, 1, 8, 0, 0, 0, 1, 115, 2, 9, 10, 0, 0, 1, 135, 1, 10, 0, 0, 0, 1, 165, 1, 11, 0, 0, 0, 2, 115, 1, 12, 0, 0, 0, 2, 135, 1, 13, 0, 0, 0, 3, 115, 1, 12, 0, 0, 0, 3, 135, 1, 13, 0, 0, 0]

Send Comment Edit Comment


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
Previous
Next