目录
PyYAML库,import yaml
1、什么是yaml数据
2、YAML应用场景
3、PyYAML库-三方库
YAML,全称是"YAML Ain't a Markup Language"(YAML 不是一种标记语言),是一种人类可读的数据序列化标准格式。它通常用于配置文件、数据交换等需求中。
YAML的设计目标是,数据结构易于理解,对人类友好,容易配对语言之间流通使用,且支持一次性dump(转储),然后又能一次性导入到程序里。
YAML数据通常使用.yml或.yaml为文件扩展名。一份YAML文件可能包含基本类型(数字,字符串,布尔型),数据集合(数组,列表),以及关联数组(哈希表,字典)
一个YAML数据的简单示例:
name: John Smith
age: 30
married: true
children:
- name: Alice Smith
age: 5
- name: Bob Smith
age: 7
在这段YAML数据中,我们定义了一个名为"John Smith"的人,他30岁,已婚,并且有两个孩子。
YAML的特点在于其良好的可读性和兼容性。你会发现YAML比XML或JSON更容易阅读和编辑,还能更好地和各种语言兼容。
Python中的YAML主要用于以下几种场景:
以上就是在Python中使用YAML的一些常见场景。
Python中的PyYAML库是一个用于解析和生成YAML数据的库。
YAML,即“YAML Ain't a Markup Language”(YAML不是一种标记语言),是一种易于阅读、适合表示层次和关联数据的可读数据序列化标准格式。
下面是如何安装和使用PyYAML的一些基本示例:
安装PyYAML库
可以使用pip在Python环境中安装PyYAML:
使用PyYAML库
PyYAML的主要功能函数是yaml.load(解析YAML数据)和yaml.dump(生成YAML数据)
pip install pyyaml
import yaml
# 解析YAML数据
data = yaml.load("""
- foo
- bar
- baz
""", Loader=yaml.FullLoader)
print(data) # 输出:['foo', 'bar', 'baz']
# 生成YAML数据
data = {"foo": "bar", "baz": "qux"}
print(yaml.dump(data))
# 输出:
# foo: bar
# baz: qux
注意:从PyYAML 5.1开始,默认的加载函数yaml.load(input)已经被废弃,为了安全解析YAML文件,推荐使用yaml.safe_load(input)或yaml.load(input, Loader=yaml.FullLoader)。
在处理YAML数据时,还需要注意YAML是区分大小写和缩进的,同样的,在PyYAML中也遵循这些规则。
以下是一些主要的方法:
此外,PyYAML还提供了一些方法方便自定义和扩展,例如定义自己的构造函数和表示函数,设置输出样式等。
以下是一些在Python中使用PyYAML库的示例:
加载YAML
你可以使用yaml.load函数(或者安全的yaml.safe_load函数)从字符串或者文件中读取YAML数据:
import yaml
# YAML字符串
yaml_string = """
name: John Smith
age: 30
married: true
children:
- name: Alice Smith
age: 5
- name: Bob Smith
age: 7
"""
data = yaml.safe_load(yaml_string)
print(data["name"]) # 输出:John Smith
print(data["children"][0]["name"]) # 输出:Alice Smith
写入YAML
你可以使用yaml.dump函数(或者安全的yaml.safe_dump函数)将Python对象转储为YAML格式的字符串,或者写入文件:
import yaml
data = {
"name": "John Smith",
"age": 30,
"married": True,
"children": [
{"name": "Alice Smith", "age": 5},
{"name": "Bob Smith", "age": 7},
]
}
yaml_data = yaml.dump(data)
print(yaml_data)
# 输出:
# name: John Smith
# age: 30
# married: true
# children:
# - name: Alice Smith
# age: 5
# - name: Bob Smith
# age: 7
加载多个YAML文档
有时候一个YAML文件中可能包含多个YAML文档,你可以使用yaml.safe_load_all函数一次性加载所有的文档:
import yaml
yaml_string = """
---
name: John
age: 30
---
name: Alice
age: 20
"""
documents = yaml.safe_load_all(yaml_string)
for doc in documents:
print("---")
print(doc)
在这个例子中,---是用来分隔多个YAML文档的标记。