YAML(.yml)文件简介
YAML(YAML Ain’t Markup Language)是一种数据序列化格式,常用于配置文件、数据存储和交换等。它以其可读性和简洁性而著称,是JSON和XML的一种流行替代格式。YAML的设计重点在于易于人类阅读和编写,同时也易于机器解析和生成。
YAML文件的特点
-
结构表示:
- 使用缩进来表示层级关系,通常使用空格缩进(不推荐使用制表符)。
- 不需要使用额外的标记符号如括号或标签。
-
数据类型:
- 支持标量(单个的、不可再分的值)、序列(列表)和映射(键值对)。
- 标量可以是字符串、整数、浮点数、布尔值等。
- 序列类似于数组或列表,使用短横线
-
开头。 - 映射类似于字典,使用冒号
:
分隔键和值。
-
注释:
- 使用井号
#
开始注释,注释内容持续到行尾。
- 使用井号
示例 YAML 文件
# 示例YAML配置文件
database:
host: localhost
port: 5432
username: admin
password: secret
servers:
- host: 192.168.1.1
port: 8080
- host: 192.168.1.2
port: 8081
features:
enable_login: true
enable_signup: false
这个示例中定义了数据库的连接信息、一组服务器的地址和端口以及某些功能的启用状态。
使用 Python 处理 YAML 文件
要在Python中读取和写入YAML文件,你需要使用一个外部库,如 PyYAML
,这是处理YAML数据的一个流行库。首先,需要安装这个库(如果尚未安装):
pip install pyyaml
Python 示例:读取YAML文件
import yaml
# 从YAML文件读取数据
with open('config.yml', 'r') as file:
config = yaml.safe_load(file)
print(config)
这段代码使用 safe_load()
方法从 config.yml
文件中加载数据。这是一种安全的加载方式,不支持执行YAML中可能存在的任何Python对象创建语法。
Python 示例:写入YAML文件
import yaml
data = {
'database': {
'host': 'localhost',
'port': 5432,
'username': 'admin',
'password': 'secret'
},
'servers': [
{'host': '192.168.1.1', 'port': 8080},
{'host': '192.168.1.2', 'port': 8081}
],
'features': {
'enable_login': True,
'enable_signup': False
}
}
# 将数据写入YAML文件
with open('output_config.yml', 'w') as file:
yaml.safe_dump(data, file)
这段代码使用 safe_dump()
方法将Python字典写入到 output_config.yml
文件中。与 safe_load()
一样,safe_dump()
也是安全的,不会生成任何潜在危险的YAML标签。
在Python中,使用PyYAML库读取YAML文件后,内容通常会被转换成Python的字典(如果YAML结构是键值对的话)或者列表(如果YAML结构是序列的话)。这意味着你可以使用标准的Python字典或列表操作来访问这些数据。
print(config_my)
print(config_my['database'])
print(config_my['servers'])
print(config_my['servers'][0])
print(config_my['servers'][1])
print(config_my['servers'][1]['host'])
print(config_my['servers'][1]['port'])
print(config_my['features'])
print(config_my['features']['enable_login'])
print(config_my['features']['enable_signup'])
总结
YAML文件因其人类可读的格式而在配置文件和数据序列化场景中广受欢迎。在Python中,通过 PyYAML
库的支持,你可以轻松地处理YAML数据,无论是加载配置、存储数据还是与其他系统交换数据。