python PyYAML库:配置文件处理

2614 篇文章 2 订阅
2451 篇文章 14 订阅

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%免费】

在这里插入图片描述

 ​​​​软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值