当前位置: 首页 > article >正文

yaml的学习记录

可以通过层级方式直接访问配置项,也可以将某一级定义为新的配置对象,以便更方便地管理和访问配置。这两种方法各有优缺点,可以根据具体需求选择合适的方式。

### 1. 层级方式访问配置项

这种方式直接通过字典的键来访问配置项,适用于简单的配置结构。

#### 示例代码

假设你有一个 `config.yaml` 文件,内容如下:

```yaml
default:
  username: your_username
  password: your_password
  database:
    host: localhost
    port: 5432
    name: my_database
```


你可以直接通过层级方式访问配置项:

```Python
import yaml

# 读取 YAML 文件
with open('config.yaml', 'r') as file:
    config = yaml.safe_load(file)

# 获取配置项
username = config['default']['username']
password = config['default']['password']
host = config['default']['database']['host']
port = config['default']['database']['port']
name = config['default']['database']['name']

print(f'Username: {username}')
print(f'Password: {password}')
print(f'Host: {host}')
print(f'Port: {port}')
print(f'Database Name: {name}')
```


### 2. 将某一级定义为新的配置对象

这种方式将某一级配置提取出来,定义为一个新的配置对象,适用于复杂的配置结构,可以提高代码的可读性和可维护性。

#### 示例代码

假设你有一个 `config.yaml` 文件,内容如下:

```yaml
default:
  username: your_username
  password: your_password
  database:
    host: localhost
    port: 5432
    name: my_database
```


你可以将 `default` 和 `database` 分别定义为新的配置对象:

```Python
import yaml

# 读取 YAML 文件
with open('config.yaml', 'r') as file:
    config = yaml.safe_load(file)

# 提取配置对象
default_config = config['default']
database_config = default_config['database']

# 获取配置项
username = default_config['username']
password = default_config['password']
host = database_config['host']
port = database_config['port']
name = database_config['name']

print(f'Username: {username}')
print(f'Password: {password}')
print(f'Host: {host}')
print(f'Port: {port}')
print(f'Database Name: {name}')
```


### 3. 使用类封装配置

为了进一步提高代码的可读性和可维护性,可以将配置封装在一个类中。

#### 示例代码

```Python
import yaml

class Config:
    def __init__(self, config_dict):
        self.default = config_dict['default']
        self.database = self.default['database']

    @property
    def username(self):
        return self.default['username']

    @property
    def password(self):
        return self.default['password']

    @property
    def host(self):
        return self.database['host']

    @property
    def port(self):
        return self.database['port']

    @property
    def name(self):
        return self.database['name']

# 读取 YAML 文件
with open('config.yaml', 'r') as file:
    config_dict = yaml.safe_load(file)

# 创建配置对象
config = Config(config_dict)

# 获取配置项
print(f'Username: {config.username}')
print(f'Password: {config.password}')
print(f'Host: {config.host}')
print(f'Port: {config.port}')
print(f'Database Name: {config.name}')
```


### 总结

- **层级方式**:适用于简单的配置结构,直接通过字典的键来访问配置项。
- **定义新的配置对象**:适用于复杂的配置结构,将某一级配置提取出来,定义为新的配置对象,提高代码的可读性和可维护性。
- **使用类封装配置**:进一步提高代码的可读性和可维护性,将配置封装在一个类中,通过属性访问配置项。

选择哪种方式取决于你的具体需求和配置的复杂度。希望这些示例能帮助你更好地管理和访问配置。


http://www.kler.cn/a/397191.html

相关文章:

  • ServletConfig、ServletContext、HttpServletRequest与HttpServletResponse常见API
  • 【计算机毕设】无查重 基于python豆瓣电影评论舆情数据可视化系统(完整系统源码+数据库+开发笔记+详细部署教程)✅
  • Docker部署Kafka SASL_SSL认证,并集成到Spring Boot
  • 掌握C#中的异步编程:async和await关键字详解
  • ETH挖矿显卡超频信息汇总
  • github和Visual Studio
  • 我们是如何实现 TiDB Cloud Serverless 的 - 成本篇
  • Java爬虫(HttpURLConnection)详解
  • 分布式----Ceph部署
  • 动态规划不同维度分析leetcode198.打家劫舍问题
  • 如何选择国产化CMS来建设政务网站?
  • 创建vue+electron项目流程
  • Ubuntu终端跑colmap实验记录——生成sparse和poses_bounds.npy
  • FFmpeg 4.3 音视频-多路H265监控录放C++开发十四,总结编码过程,从摄像头获得数据后,转成AVFrame,然后再次转成AVPacket,
  • Linux设置静态IP
  • 鸿蒙进阶篇-定时器、递归
  • IDEA2024:右下角显示内存
  • .NET6.0 CS0579“System.Reflection.AssemblyCompanyAttribute”特性重复 问题解决
  • 计算机网络各层设备总结归纳(更新ing)
  • RAG经验论文《FACTS About Building Retrieval Augmented Generation-based Chatbots》笔记
  • Java项目实战II基于微信小程序的电子商城购物平台(开发文档+数据库+源码)
  • Spring Boot之Spring-devtools热部署
  • QQ 小程序已发布,但无法被搜索的解决方案
  • 【Linux:epoll】
  • Wireshark 分析SQL 批量插入慢的问题
  • 江苏显卡服务器有哪些好处?