首页 文章

如何在Python中解析YAML文件

提问于
浏览
388

如何在Python中解析YAML文件?

7 回答

  • 40

    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

  • 36

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

    替代品

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

    • 其他编程语言的支持

    • 读/写性能

    • 紧凑度(文件大小)

    另见:Comparison of data serialization formats

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

  • 6

    如果您的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() ,除非你真的完全控制输入,需要它(很少这样)并知道你在做什么 .

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

    from ruamel.yaml import YAML
    from pathlib import Path
    
    path = Path('example.yaml')
    yaml = YAML(typ='safe')
    data = yaml.load(path)
    
  • 2

    导入yaml模块并将文件加载到名为“my_dict”的字典中:

    import yaml
    my_dict = yaml.load(open('filename'))
    

    这就是你所需要的一切 . 现在整个yaml文件都在'my_dict'字典中 .

  • 0

    Example:

    defaults.yaml

    url: https://www.google.com
    

    environment.py

    from ruamel import yaml
    
    data = yaml.safe_load(open('defaults.yaml'))
    data['url']
    
  • 15

    我用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并没有死,因为事实证明,它只是维持在一个不同的地方 .

  • 531
    #!/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:]))
    

相关问题