PyYAML 是一个非常实用的库,用于处理 YAML(YAML Ain't Markup Language)格式的配置文件。YAML 是一种人类可读的数据序列化格式,非常适合用作配置文件。下面我将提供多个使用 PyYAML 的示例,并说明它们的应用场景。
安装 PyYAML
首先确保已经安装了 PyYAML 库:
pip install pyyaml
1. 读取 YAML 文件
应用场景: 从 YAML 文件中读取配置信息。
示例代码:
import yaml
with open('config.yaml', 'r') as file:
config = yaml.safe_load(file)
print(config)
config.yaml:
database:
host: localhost
port: 3306
username: user
password: secret
输出结果:
{
'database': {
'host': 'localhost',
'port': 3306,
'username': 'user',
'password': 'secret'
}
}
2. 写入 YAML 文件
应用场景: 将数据写入 YAML 文件中作为配置文件。
示例代码:
import yaml
data = {
'database': {
'host': 'localhost',
'port': 3306,
'username': 'user',
'password': 'secret'
}
}
with open('config.yaml', 'w') as file:
yaml.safe_dump(data, file)
生成的 config.yaml:
database:
host: localhost
port: 3306
username: user
password: secret
3. 加载 YAML 字符串
应用场景: 从 YAML 字符串中加载配置信息。
示例代码:
import yaml
yaml_string = """
database:
host: localhost
port: 3306
username: user
password: secret
"""
config = yaml.safe_load(yaml_string)
print(config)
输出结果:
{
'database': {
'host': 'localhost',
'port': 3306,
'username': 'user',
'password': 'secret'
}
}
4. 生成 YAML 字符串
应用场景: 将 Python 对象转换为 YAML 字符串。
示例代码:
import yaml
data = {
'database': {
'host': 'localhost',
'port': 3306,
'username': 'user',
'password': 'secret'
}
}
yaml_string = yaml.safe_dump(data)
print(yaml_string)
输出结果:
database:
host: localhost
port: 3306
username: user
password: secret
5. 处理列表
应用场景: 处理 YAML 文件中的列表数据。
示例代码:
import yaml
with open('list.yaml', 'r') as file:
data = yaml.safe_load(file)
print(data)
list.yaml:
fruits:
- apple
- banana
- cherry
输出结果:
{'fruits': ['apple', 'banana', 'cherry']}
6. 处理嵌套结构
应用场景: 处理 YAML 文件中的嵌套结构。
示例代码:
import yaml
with open('nested.yaml', 'r') as file:
data = yaml.safe_load(file)
print(data)
nested.yaml:
user:
name: John Doe
age: 30
address:
street: 123 Main St
city: Anytown
state: CA
输出结果:
{
'user': {
'name': 'John Doe',
'age': 30,
'address': {
'street': '123 Main St',
'city': 'Anytown',
'state': 'CA'
}
}
}
7. 处理复杂数据类型
应用场景: 处理 YAML 文件中的复杂数据类型,如字典和列表的组合。
示例代码:
import yaml
with open('complex.yaml', 'r') as file:
data = yaml.safe_load(file)
print(data)
complex.yaml:
employees:
- name: Alice
position: Developer
skills:
- Python
- JavaScript
- name: Bob
position: Designer
skills:
- Photoshop
- Illustrator
输出结果:
{
'employees': [
{'name': 'Alice', 'position': 'Developer', 'skills': ['Python', 'JavaScript']},
{'name': 'Bob', 'position': 'Designer', 'skills': ['Photoshop', 'Illustrator']}
]
}
8. 使用标签
应用场景: 使用 YAML 标签来表示特定的数据类型。
示例代码:
import yaml
yaml_string = """
!!python/object:datetime.datetime
2024-08-15T12:42:00Z
"""
data = yaml.safe_load(yaml_string)
print(data)
输出结果:
2024-08-15 12:42:00+00:00
9. 处理 YAML 锚点和别名
应用场景: 使用 YAML 锚点和别名来避免重复定义相同的结构。
示例代码:
import yaml
yaml_string = """
company:
name: Example Corp
employees:
- &employee
name: Alice
position: Developer
- <<: *employee
name: Bob
position: Designer
"""
data = yaml.safe_load(yaml_string)
print(data)
输出结果:
{
'company': {
'name': 'Example Corp',
'employees': [
{'name': 'Alice', 'position': 'Developer'},
{'name': 'Bob', 'position': 'Designer'}
]
}
}
10. 使用 YAML 标签来表示 Python 类
应用场景: 使用 YAML 标签来表示 Python 类的对象。
示例代码:
import yaml
class User:
def __init__(self, name, age):
self.name = name
self.age = age
yaml_string = """
!!python/object:__main__.User
- Alice
- 30
"""
user = yaml.safe_load(yaml_string)
print(user.name, user.age)
输出结果:
Alice 30
11. 处理 YAML 流
应用场景: 从 YAML 流中读取数据。
示例代码:
import yaml
yaml_stream = """
--- # Document 1
name: Alice
age: 30
--- # Document 2
name: Bob
age: 25
"""
for doc in yaml.safe_load_all(yaml_stream):
print(doc)
输出结果:
{'name': 'Alice', 'age': 30}
{'name': 'Bob', 'age': 25}
12. 使用环境变量
应用场景: 使用环境变量来动态替换 YAML 文件中的值。
示例代码:
import os
import yaml
with open('env.yaml', 'r') as file:
data = yaml.safe_load(file)
data['database']['password'] = os.getenv('DB_PASSWORD')
print(data)
env.yaml:
database:
host: localhost
port: 3306
username: user
password: ${DB_PASSWORD}
输出结果:
假设环境变量 DB_PASSWORD 的值为 mysecretpassword:
{
'database': {
'host': 'localhost',
'port': 3306,
'username': 'user',
'password': 'mysecretpassword'
}
}
最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】
软件测试面试文档
我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。