您好,欢迎来到12图资源库!分享精神,快乐你我!我们只是素材的搬运工!!
  • 首 页
  • 当前位置:首页 > 开发 > WEB开发 >
    大少数顺序员都不知道的6个YAML功用(3)
    时间:2021-03-01 21:03 来源:网络整理 作者:网络 浏览:收藏 挑错 推荐 打印

                "db": {"host""localhost"

                       "name""main_db"

                       "port": 1337}, 

                "email": {"admin""admin@example.com"}}, 

      "dev": { "db": {"host""localhost"

                      "name""main_db"

                      "port": 1337}, 

               "email": {"admin""admin@example.com"}},} 

    类型转化

    双重爆炸!在YAML中有特殊含义。它被称为“第二标签句柄”和!tag:yaml.org,2002 :(源)的简写。

    您可以像这样停止复杂的转换:

    price: !!float 42 

    id: !!str 42 

    或更复杂的内容,例如映射到直接在YAML中未指定的默许Python类型:

    tuple_example: !!python/tuple 

      - 1337 

      - 42 

    set_example: !!set {1337, 42} 

    date_example: !!timestamp 2020-12-31 

    您可以这样阅读:

    import yaml 

    import pprint 

    with open("example.yaml"as fp: 

        data = fp.read() 

    pp = pprint.PrettyPrinter(indent=4) 

    pased = yaml.unsafe_load(data) 

    pp.pprint(pased) 

    你会失掉这个:

    {   'date_example': datetime.date(2020, 12, 31), 

        'set_example': {1337, 42}, 

        'tuple_example': (1337, 42)} 

    本示例运用特定于Python的标记!! python / tuple和一些标准的YAML标记。PyYaml有一个不错的概述:

    ## Standard YAML tags 

    YAML               Python 3 

    !!null             None 

    !!bool             bool 

    !!int              int 

    !!float            float 

    !!binary           bytes 

    !!timestamp        datetime.datetime 

    !!omap, !!pairs    list of pairs 

    !!set              set 

    !!str              str 

    !!seq              list 

    !!map              dict 

    ## Python-specific tags 

    YAML               Python 3 

    !!python/none      None 

    !!python/bool      bool 

    !!python/bytes     bytes 

    !!python/str       str 

    !!python/unicode   str 

    !!python/int       int 

    !!python/long      int 

    !!python/float     float 

    !!python/complex   complex 

    !!python/list      list 

    !!python/tuple     tuple 

    !!python/dict      dict 

    ## Complex Python tags 

    !!python/name:module.name         module.name 

    !!python/module:package.module    package.module 

    !!python/object:module.cls        module.cls instance 

    !!python/object/new:module.cls    module.cls instance 

    !!python/object/apply:module.f    value of f(...) 

    请留意,加载非标准标签是不安全的!可以运用!! python / object / apply:module.f执行恣意代码。在PyYaml中,您需求yaml.unsafe_load才能运用它。因此,您能够不应该运用它!

    一个YAML中的多个文档

    YAML中的三个破折号辨别表示文档:

    foo: bar 

    --- 

    fizz: buzz 

    在Python中,您可以运用PyYAML像这样加载它:

    import yaml 

    with open("example.yaml"as fp: 

        data = fp.read() 

    parsed = yaml.safe_load_all(data)  # parsed is a generator 

    假设将已剖析的内容转换为列表并打印出来,则会失掉:

    [{'foo''bar'}, {'fizz''buzz'}] 

    请留意,这不是写列表的替代符号。是不同的文件。

    (责任编辑:admin)