【发布时间】: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