如何在 Python 中解析 YAML 文件

新手上路,请多包涵

如何在 Python 中解析 YAML 文件?

原文由 Szymon Lipiński 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 554
2 个回答

不依赖 C 头文件的最简单和最纯粹的方法是 PyYaml( 文档),可以通过 pip install pyyaml 安装:

 #!/usr/bin/env python

import yaml

with open("example.yaml", "r") as stream:
    try:
        print(yaml.safe_load(stream))
    except yaml.YAMLError as exc:
        print(exc)

就是这样。普通的 yaml.load() 函数也存在,但 yaml.safe_load() 应该始终是首选,以避免引入任意代码执行的可能性。因此,除非您明确需要任意对象序列化/反序列化,否则请使用 safe_load

请注意,PyYaml 项目支持 YAML 1.1 规范 的最高版本。如果需要 YAML 1.2 规范 支持,请参阅 此答案 中所述的 ruamel.yaml

此外,您还可以使用 pyyaml 的替代品,使您的 yaml 文件按照 您拥有它的方式 排序,称为 oyaml在这里查看 oyaml 的 synk

原文由 Jonathan Holloway 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 Python 2+3(和 unicode)读写 YAML 文件

# -*- coding: utf-8 -*-
import yaml
import io

# Define data
data = {
    'a list': [
        1,
        42,
        3.141,
        1337,
        'help',
        u'€'
    ],
    'a string': 'bla',
    'another dict': {
        'foo': 'bar',
        'key': 'value',
        'the answer': 42
    }
}

# Write YAML file
with io.open('data.yaml', 'w', encoding='utf8') as outfile:
    yaml.dump(data, outfile, default_flow_style=False, allow_unicode=True)

# Read YAML file
with open("data.yaml", 'r') as stream:
    data_loaded = yaml.safe_load(stream)

print(data == data_loaded)

创建的 YAML 文件

a list:
- 1
- 42
- 3.141
- 1337
- help
- €
a string: bla
another dict:
  foo: bar
  key: value
  the answer: 42

常见的文件结尾

.yml.yaml

备择方案

对于您的应用程序,以下内容可能很重要:

  • 其他编程语言的支持
  • 读/写性能
  • 紧凑性(文件大小)

另请参阅: 数据序列化格式的比较

如果您更愿意寻找一种制作配置文件的方法,您可能需要阅读我的短文 Configuration files in Python

原文由 Martin Thoma 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题