python实战: 解析yaml配置文件

一,生成目录和生成配置文件

创建目录和配置文件

[liuhongdi@img news]$ mkdir conf
[liuhongdi@img news]$ cd conf/
[liuhongdi@img conf]$ vi conf.yaml
[liuhongdi@img conf]$ more conf.yaml

查看文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
data_dev:
  host: 127.0.0.1
  port: 3306
  user: root
  password: password123
  database: learning
  charset: utf8
data_prd:
  host: 127.0.0.1
  port: 3306
  user: root
  password: password123
  database: learning-prod
  charset: utf8

说明:刘宏缔的架构森林—专注it技术的博客,
网址:https://imgtouch.com
本文: https://blog.imgtouch.com/index.php/2024/02/19/jie-xi-yaml-pei-zhi-wen-jian/
代码: https://github.com/liuhongdi/ 或 https://gitee.com/liuhongdi
说明:作者:刘宏缔 邮箱: 371125307@qq.com

二,安装相关的库PyYAML

1,用pip安装:

(venv) [liuhongdi@img news]$ pip3 install PyYAML
Collecting PyYAML
  Downloading PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (757 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 757.7/757.7 kB 12.6 kB/s eta 0:00:00
Installing collected packages: PyYAML
Successfully installed PyYAML-6.0.1
[notice] A new release of pip is available: 23.1.2 -> 24.0
[notice] To update, run: pip install --upgrade pip

安装完成后查看已安装库的版本:

(venv) [liuhongdi@img news]$ pip3 show PyYAML
Name: PyYAML
Version: 6.0.1
Summary: YAML parser and emitter for Python
Home-page: https://pyyaml.org/
Author: Kirill Simonov
Author-email: xi@resolvent.net
License: MIT
Location: /web/site/python/news/venv/lib/python3.11/site-packages
Requires:
Required-by:

三,编写代码读取yaml文件:

1,代码:

handle_yaml.py

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
import yaml
 
 
class ConfYaml:  # 操作conf.yaml文件的
    def __init__(self, file):
        self.file = file
 
    def read_yaml(self, node='', encoding='utf-8'):
        """读取yaml数据"""
        with open(self.file, encoding=encoding) as f:
            conf = yaml.load(f.read(), Loader=yaml.FullLoader)
            if node == '':
                return conf
            else:
                return conf[node]
 
 
if __name__ == '__main__':
    conf_file = "../../conf/conf.yaml"
    conf_yaml = ConfYaml(conf_file)
    node = 'data_prd'
    conf_node = conf_yaml.read_yaml(node)  # 返回是字典格式,所以直接下标取数据
    print(conf_node)
 
    host = conf_node['host']
    port = conf_node['port']
    user = conf_node['user']
    pswd = conf_node['password']
    base = conf_node['database']
    char = conf_node['charset']
 
    print("host:", host)
    print("port:", port)
    print("user:", user)
    print("password", pswd)
    print("database:", base)
    print("charset:", char)

运行结果:

{'host': '127.0.0.1', 'port': 3307, 'user': 'root', 'password': 'password123', 'database': 'learning-prod', 'charset': 'utf8'}
host: 127.0.0.1
port: 3307
user: root
password password123
database: learning-prod
charset: utf8
posted @ 2024-02-19 12:44  刘宏缔的架构森林  阅读(99)  评论(0编辑  收藏  举报