"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)