【问题标题】:How to format YAML to include bracket as one of the value without quotes如何格式化 YAML 以包含括号作为不带引号的值之一
【发布时间】:2021-08-02 12:46:09
【问题描述】:

我正在使用 python3 yaml 包从字典中编写 yaml,例如:

main1:
  aa:
    val1: [ ]
  bb:
  - val2: xxxxxxx
    val3: [1]

但我无法超越。 一切都在得到:

main1:
  aa:
    val1: '[ ]'
  bb:
  - val2: xxxxxxx
    val3: '[1]'

我的代码sn-p:

yaml.dump_all(data, f, default_flow_style=False, sort_keys=False)

我想要的只是删除列表元素周围的单引号 保持其他与上面提到的相同,我已经在各种博客和堆栈溢出答案中进行了搜索,对我没有任何帮助,有什么帮助吗? 我用yaml.dump(data,f, default_flow_style=None, sort_keys=False) 做字典:

data = {
    'main1': {
        'aa': {
            'val1': [],
            'check1':{'check2':1}
        },
        'bb': [{
          'val2': 'xxxxxxx',
          'val3': [1],
        }],
    },
}

它将按预期工作括号,但嵌套字典格式不按预期。

main1:
  aa:
    val1: []
    check1: {check2: 1}
  bb:
  - val2: xxxxxxx
    val3: [1]

预期:

main1:
  aa:
    val1: []
    check1: 
        check2: 1
  bb:
   - val2: xxxxxxx
     val3: [1]

【问题讨论】:

  • 不是解决方案而是解决方法,我可以通过以文本模式打开文件来实现这一点,而不是应用正则表达式并再次以 yaml 形式写入。 f = open("1.yaml", "r") t = f.read() import re print(t) tmp = re.sub("'[", "[", t) print(t) f = open("2.yaml", "w") f.write(tmp) f.close()
  • 不可能告诉 YAML 处理器删除引号,因为 [] 括号是 YAML 中的语法元素。您也不会期望在以 JSON 格式编写文件时可以做到这一点,对吧?
  • @ruohola 我想我理解得很好。 '[1]' 是 YAML 中的 3 个字符的字符串,而 [1] 是一个包含一个项目的序列,数字 1,写在紧凑的 flow style 中。我是 YAML 核心团队的成员,也是链接教程的作者。
  • @ShubhamChauhan 请创建一个minimal reproducible example。您的问题缺少您正在使用的 python 代码。
  • @tinita ... 今天的咖啡太少了。我很抱歉。

标签: python-3.x yaml


【解决方案1】:

以下代码为我返回您想要的输出(第 3 行中 [] 之间缺少空格除外):

import yaml

data = {
    'main1': {
        'aa': {
            'val1': []
        },
        'bb': [{
          'val2': 'xxxxxxx',
          'val3': [1],
        }],
    },
}

print(yaml.dump(data, default_flow_style=None, sort_keys=False))

输出:

main1:
  aa:
    val1: []
  bb:
  - val2: xxxxxxx
    val3: [1]

你没有展示你是如何创建数据字典的,所以我只是在这里猜测。

【讨论】:

  • 您添加了第二个数据示例和第二个输出,但不清楚您的预期输出是什么。它按预期工作。如果default_flow_style 设置为None,则没有嵌套字典和列表的字典和列表将以流样式转储。无法使用 pyyaml 进一步自定义。
猜你喜欢
  • 2018-08-29
  • 1970-01-01
  • 1970-01-01
  • 2023-01-12
  • 2016-12-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
相关资源
最近更新 更多