如何格式化 YAML 以包含括号作为不带引号的值之一
Posted
技术标签:
【中文标题】如何格式化 YAML 以包含括号作为不带引号的值之一【英文标题】:How to format YAML to include bracket as one of the value without quotes 【发布时间】: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 ... 今天的咖啡太少了。我很抱歉。
【参考方案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 进一步自定义。以上是关于如何格式化 YAML 以包含括号作为不带引号的值之一的主要内容,如果未能解决你的问题,请参考以下文章