YAML 文件未加载嵌套值
YAML File not loading with nested values
我正在 python 使用 ruamel.yaml 编写 YAML 解析器
ruamel.yaml 的原因是它保留了关键的注释!
我知道问题是由 YAML 文件引起的,但我不确定如何解决这个问题,或者可能的修改是什么。我尝试了几种缩进方式,但都被删除了。
保持简单,传入源并尝试加载它。
代码:
import os
import os.path
import ruamel.yaml
from ruamel.yaml import YAML
def main():
source = "my_yaml.yml"
# Check if the source fil is valid yaml
try:
yaml = ruamel.yaml.YAML()
with open(source) as fp:
# data is the file data and will be used down the line
data = yaml.load(fp)
if data is None:
data = {}
return data
except:
print("Yaml file is not valid. Please check the source.")
return 1
if __name__ == "__main__":
out = main()
有效的 YAML:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key3"
d3_nest2: "key4"
YAML 不起作用:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key3"
d3_nest2: "key4"
# this next item breaks my yaml
- d3_nest3: "key6"
d3_nest4: "key7"
YAML 的其他变体:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key4"
d3_nest2: "key5"
# this next item breaks my yaml
- d3_nest3: "key6"
d3_nest4: "key7"
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key4"
d3_nest2: "key5"
# this next item breaks my yaml
- d3_nest3: "key6"
d3_nest4: "key7"
这个:
d3_nest2:key5
- d3_nest3: key6
d3_nest4: key7
是无效的 YAML,因为一旦开始块样式映射,每一行
在您更改缩进之前,必须采用 key: value
形式。
不清楚你想通过在映射中间提供一个序列元素来实现什么,就像你不能让 Python dict
只作为第二个元素的序列一样.也许您想要以下内容:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key3"
d3_nest2: # "key4" removed
- d3_nest3: "key6"
d3_nest4: "key7"
我建议你在 Python 中创建你想要的数据结构(使用嵌套的字典、列表和字符串值),假设你对此更熟悉,然后使用 ruamel.yaml
转储这样您就可以更好地了解什么是正确的 YAML 语法。
包含 YAML 文档的文件的推荐扩展名已经 .yaml
超过 15 年了。
我正在 python 使用 ruamel.yaml 编写 YAML 解析器 ruamel.yaml 的原因是它保留了关键的注释!
我知道问题是由 YAML 文件引起的,但我不确定如何解决这个问题,或者可能的修改是什么。我尝试了几种缩进方式,但都被删除了。
保持简单,传入源并尝试加载它。
代码:
import os
import os.path
import ruamel.yaml
from ruamel.yaml import YAML
def main():
source = "my_yaml.yml"
# Check if the source fil is valid yaml
try:
yaml = ruamel.yaml.YAML()
with open(source) as fp:
# data is the file data and will be used down the line
data = yaml.load(fp)
if data is None:
data = {}
return data
except:
print("Yaml file is not valid. Please check the source.")
return 1
if __name__ == "__main__":
out = main()
有效的 YAML:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key3"
d3_nest2: "key4"
YAML 不起作用:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key3"
d3_nest2: "key4"
# this next item breaks my yaml
- d3_nest3: "key6"
d3_nest4: "key7"
YAML 的其他变体:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key4"
d3_nest2: "key5"
# this next item breaks my yaml
- d3_nest3: "key6"
d3_nest4: "key7"
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key4"
d3_nest2: "key5"
# this next item breaks my yaml
- d3_nest3: "key6"
d3_nest4: "key7"
这个: d3_nest2:key5 - d3_nest3: key6 d3_nest4: key7
是无效的 YAML,因为一旦开始块样式映射,每一行
在您更改缩进之前,必须采用 key: value
形式。
不清楚你想通过在映射中间提供一个序列元素来实现什么,就像你不能让 Python dict
只作为第二个元素的序列一样.也许您想要以下内容:
d1: "key1"
d2: "key2"
d3:
d3_nest1: "key3"
d3_nest2: # "key4" removed
- d3_nest3: "key6"
d3_nest4: "key7"
我建议你在 Python 中创建你想要的数据结构(使用嵌套的字典、列表和字符串值),假设你对此更熟悉,然后使用 ruamel.yaml
转储这样您就可以更好地了解什么是正确的 YAML 语法。
包含 YAML 文档的文件的推荐扩展名已经 .yaml
超过 15 年了。