首页 > Python > 如何在 Python 中解析 YAML 文件?

如何在 Python 中解析 YAML 文件?

上一篇 下一篇

如何在 Python 中解析 YAML 文件?

分割线

网友回答:

不依赖 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 的合成

分割线

网友回答:

使用 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

选择

  • CSV:超级简单的格式(读写)
  • JSON:非常适合编写人类可读的数据;非常常用(读写)
  • YAML:YAML是JSON的超集,但更易于阅读(读写,JSON和YAML的比较)
  • pickle:一种 Python 序列化格式(读取和写入) ⚠️ 将 pickle 与来自第三方的文件一起使用会带来无法控制的任意代码执行风险。
  • MessagePack(Python包):更紧凑的表示(读写)
  • HDF5(Python包):非常适合矩阵(读写)
  • XML:也存在*叹息*(读写)

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

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

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

如果您正在寻找一种制作配置文件的方法,您可能需要阅读我的短文 Python 中的配置文件

分割线

网友回答:

如果你有符合 YAML 1.2 规范(2009 年发布)的 YAML,那么你应该使用 ruamel.yaml(免责声明:我是该软件包的作者)。
它本质上是 PyYAML 的超集,支持 YAML 1.1 的大部分内容(从 2005 年开始)。

如果你想在往返时能够保留你的评论,你当然应该使用ruamel.yaml。

升级@Jon的示例很简单:

import ruamel.yaml as yaml

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

除非您真的完全控制输入,需要它(很少)并知道您在做什么,否则请使用。safe_load()

如果您使用 pathlib 来操作文件,则最好使用新的 API ruamel.yaml 提供:Path

from ruamel.yaml import YAML
from pathlib import Path

path = Path('example.yaml')
yaml = YAML(typ='safe')
data = yaml.load(path)

模板简介:该模板名称为【如何在 Python 中解析 YAML 文件?】,大小是暂无信息,文档格式为.编程语言,推荐使用Sublime/Dreamweaver/HBuilder打开,作品中的图片,文字等数据均可修改,图片请在作品中选中图片替换即可,文字修改直接点击文字修改即可,您也可以新增或修改作品中的内容,该模板来自用户分享,如有侵权行为请联系网站客服处理。欢迎来懒人模板【Python】栏目查找您需要的精美模板。

相关搜索
  • 下载密码 lanrenmb
  • 下载次数 294次
  • 使用软件 Sublime/Dreamweaver/HBuilder
  • 文件格式 编程语言
  • 文件大小 暂无信息
  • 上传时间 04-09
  • 作者 网友投稿
  • 肖像权 人物画像及字体仅供参考
栏目分类 更多 >
热门推荐 更多 >
企业网站 html5 微信文章 单页式简历模板 微信公众平台 微信图片 微信模板 微信素材 响应式 自适应
您可能会喜欢的其他模板