如何在Python中解析YAML文件?
PyYaml是一种不依赖C头的最简单,最纯粹的方法:
#!/usr/bin/env python import yaml with open("example.yaml", 'r') as stream: try: print(yaml.load(stream)) except yaml.YAMLError as exc: print(exc)
就是这样 . 更多信息:
http://pyyaml.org/wiki/PyYAMLDocumentation
# -*- 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.load(stream) print(data == data_loaded)
a list: - 1 - 42 - 3.141 - 1337 - help - € a string: bla another dict: foo: bar key: value the answer: 42
.yml 和 .yaml
.yml
.yaml
CSV:超简单格式(read & write)
JSON:很适合编写人类可读的数据;非常常用(read & write)
YAML:YAML是JSON的超集,但更容易阅读(read & write,comparison of JSON and YAML)
pickle:Python序列化格式(read & write)
MessagePack(Python package):更紧凑的表示形式(read & write)
HDF5(Python package):对于矩阵很好(read & write)
XML:也存在叹气(read&write)
对于您的应用程序,以下可能很重要:
其他编程语言的支持
读/写性能
紧凑度(文件大小)
另见:Comparison of data serialization formats
如果您正在寻找一种制作配置文件的方法,您可能需要阅读我的简短文章Configuration files in Python
如果您的YAML符合YAML 1.2 specification(2009年发布),那么您应该使用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() ,除非你真的完全控制输入,需要它(很少这样)并知道你在做什么 .
safe_load()
如果您使用pathlib Path 来操作文件,则最好使用新的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)
导入yaml模块并将文件加载到名为“my_dict”的字典中:
import yaml my_dict = yaml.load(open('filename'))
这就是你所需要的一切 . 现在整个yaml文件都在'my_dict'字典中 .
Example:
defaults.yaml
url: https://www.google.com
environment.py
from ruamel import yaml data = yaml.safe_load(open('defaults.yaml')) data['url']
我用ruamel.yaml . 详情和辩论在这里 .
from ruamel import yaml with open(filename, 'r') as fp: read_data = yaml.load(fp)
ruamel.yaml的使用与PyYAML的旧用法兼容(带有一些简单的可解决问题),并且在我提供的链接中说明,使用
from ruamel import yaml
代替
import yaml
它会解决你的大多数问题 .
EDIT :PyYAML并没有死,因为事实证明,它只是维持在一个不同的地方 .
#!/usr/bin/env python import sys import yaml def main(argv): with open(argv[0]) as stream: try: #print(yaml.load(stream)) return 0 except yaml.YAMLError as exc: print(exc) return 1 if __name__ == "__main__": sys.exit(main(sys.argv[1:]))
7 回答
PyYaml是一种不依赖C头的最简单,最纯粹的方法:
就是这样 . 更多信息:
http://pyyaml.org/wiki/PyYAMLDocumentation
使用Python 2 3(和unicode)读写YAML文件
创建了YAML文件
公共文件结尾
.yml
和.yaml
替代品
CSV:超简单格式(read & write)
JSON:很适合编写人类可读的数据;非常常用(read & write)
YAML:YAML是JSON的超集,但更容易阅读(read & write,comparison of JSON and YAML)
pickle:Python序列化格式(read & write)
MessagePack(Python package):更紧凑的表示形式(read & write)
HDF5(Python package):对于矩阵很好(read & write)
XML:也存在叹气(read&write)
对于您的应用程序,以下可能很重要:
其他编程语言的支持
读/写性能
紧凑度(文件大小)
另见:Comparison of data serialization formats
如果您正在寻找一种制作配置文件的方法,您可能需要阅读我的简短文章Configuration files in Python
如果您的YAML符合YAML 1.2 specification(2009年发布),那么您应该使用ruamel.yaml(免责声明:我是该软件包的作者) . 它本质上是PyYAML的超集,支持大部分YAML 1.1(从2005年开始) .
如果你想在往返时保留你的评论,你当然应该使用ruamel.yaml .
升级@ Jon的例子很简单:
使用
safe_load()
,除非你真的完全控制输入,需要它(很少这样)并知道你在做什么 .如果您使用pathlib
Path
来操作文件,则最好使用新的API ruamel.yaml提供:导入yaml模块并将文件加载到名为“my_dict”的字典中:
这就是你所需要的一切 . 现在整个yaml文件都在'my_dict'字典中 .
Example:
defaults.yaml
environment.py
我用ruamel.yaml . 详情和辩论在这里 .
ruamel.yaml的使用与PyYAML的旧用法兼容(带有一些简单的可解决问题),并且在我提供的链接中说明,使用
代替
它会解决你的大多数问题 .
EDIT :PyYAML并没有死,因为事实证明,它只是维持在一个不同的地方 .