【发布时间】:2020-02-17 15:12:36
【问题描述】:
我正在尝试加载以下 yaml:
yaml_string = """
key:
- [HELLO]
- another string
- another
"""
yaml.safe_load(yaml_string) # returns {"key": [["HELLLO"], "another_string", "another"}
结果是一个包含 HELLO 字符串的列表。我想加载一个字符串值,即
type(yaml.save_load(yaml_string).get("key")[0])
<class 'str'>
由于 yaml 描述了某种以这种方式格式化的命令,因此有必要将其作为字符串而不是序列来读取。基本上我希望能够读取以括号开头和结尾的字符串。正如下面的评论所解释的,不幸的是,无法添加",因为 yaml 文件是由使用 Jackson 的 Java 应用程序创建的,将 yaml 转换为对象并处理以括号开头和结尾的条目没有问题作为字符串。这些文件很多,用户可以开始添加引号。
这可能吗?
编辑:添加了更完整的示例
【问题讨论】:
-
如果你想要一个字符串,那么你为什么要使用
-和[ .. ]?这些使值成为列表列表 -
我编辑了我的问题。在 yaml 中,它是项目列表的键。我想要他们所有的字符串
-
您仍然没有解释为什么在
HELLO周围添加[...]。 -
所以,要明确一点,你想要
{"key": [["HELLLO"], "another_string", "another"}而不是{"key": ["[HELLLO]", "another_string", "another"}? -
不可能像字符串一样读取这些项目(以一般方式)。
[...]是官方 YAML 语法的一部分(就像在 JSON 中一样)。它被称为流样式(与默认的块样式相反)。您必须实现一个忽略流式语法的解析器。基本上,如果您希望[foo]是一个字符串"[foo]",那么您所拥有的不是 YAML。