请启用 Javascript 以查看内容

Python3使用多种类型的配置文件方式

 ·   ·  ☕ 3 分钟  ·  ✍️ ayunw

前言

运维工作中有时候也会用Python写一些脚本或者一些小项目,来实现"一杯咖啡即运维"的状态。而通常有些时候某些繁琐且重复的工作,我们是很忌讳的。当shell无法很好的满足我们的需求时,Python往往是运维选择的第一手自动化语言。如果你非常熟练Go或者其他语言就别喷我了,在这里恭喜你,你是大佬!

一、Python3 使用 ini 配置文件

详细说明,可以看我的另一篇文章: Python3读写ini配置文件,这里我只简单演示一下一般来说怎么从ini配置文件取值来使用。

1.1 ini配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
$ cat config/gitlab_config.ini
[mysql]
database=ayunw
host=127.0.0.1
password=123456
port=3306
user=root

[postgresql]
database=prometheus
host=192.168.10.200
password=123456
port=5432

1.2 Python3读取 ini 配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
$ cat read_ini_config.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import os
from configparser import ConfigParser

# 获取当前脚本所在的绝对路径
abs_path = script_realpath = os.path.split(os.path.realpath(__file__))[0]
# 获取ini配置文件
config_ini = os.path.join(abs_path, 'config/gitlab_config.ini')

config = ConfigParser()
config.read(config_ini)
pg_db = config['postgresql']['database']
mysql_host = config['mysql']['host']
print(f'pg_db: {pg_db}')
print(f'mysql_host: {mysql_host}')

二、Python3使用 yaml 配置文件

2.1 yaml配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
$ cat config/gitlab_config.yaml
default:
  DEBUG: 'True'
  ADMIN: 'ayunw'

sit:
  configs:
    url: 'https://git.ayunw.cn/api/v4'
    token: '66666666666666666666'

pro:
  configs:
    url: 'http://gitlab.ayunw.cn:8080/api/v4'
    token: '88888888888888888888'

2.2 Python3读取 yaml 配置文件

 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
38
39
40
41
42
$ cat read_yaml_config.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import yaml

# 获取当前脚本所在的绝对路径
abs_path = script_realpath = os.path.split(os.path.realpath(__file__))[0]
# 获取ini配置文件
config_yaml = os.path.join(abs_path, 'config/gitlab_config.yaml')

""" 读取yaml格式的配置文件 """
print('read yaml config...')
with open(config_yaml, 'r', encoding='utf-8') as yaml_file:
    config = yaml.safe_load_all(yaml_file)
    # print(type(config))
    # print('----------  这里是方法一 ----------')
    # ''' 方法一、直接循环取值 '''
    # for item in config:
    #     pprint(item)
    #     print()
    #     print(item['newpaas'])
    #     print(item['newpaas']['configs'])
    #     print(item['newpaas']['configs']['token'])

    # ''' 方法二、转化成列表然后取值 '''
    # print('----------  这里是方法二 ----------')
    # config2 = list(config)
    # for item2 in config2:
    #     pprint(item2)
    #     print(item2['default']['ADMIN'])

    ''' 方法三、列表解析式的方式获取值 '''
    print('----------  这里是方法三 ----------')
    conf3 = yaml.safe_load_all(yaml_conf)
    conf3_item = [item for item in conf3]
    # pprint(conf3_item)
    for item3 in conf3_item:
        # pprint(item3)
        print(item3['oldpaas'])
        print(item3['oldpaas']['configs'])
        print(item3['oldpaas']['configs']['token'])

三、Python3 使用 json 配置文件

3.1 json配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
$ cat config/gitlab_config.json
{
  "mysql": {
    "database": "ayunw",
    "host": "127.0.0.1",
    "password": "123456",
    "port": 3306,
    "user": "root"
  },
  "redis": {
    "database": 2,
    "host": "192.168.10.100",
    "password": "redis_2022",
    "port": 2379
  },
  "postgresql": {
    "database": "prometheus",
    "host": "192.168.10.200",
    "password": "pgsql_2022",
    "port": 5432
  }
}

3.2 Python3读取 json 配置文件

 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
$ cat read_json_config.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import json

# 获取当前脚本所在的绝对路径
abs_path = script_realpath = os.path.split(os.path.realpath(__file__))[0]
# 获取ini配置文件
config_json = os.path.join(abs_path, 'config/gitlab_config.json')

print('read json config...')
""" 读取json格式的配置文件 """
with open(config_json, 'r', encoding='utf-8') as json_file:
    ''' 1、通过常规方式赋值来配置变量 '''
    config = json.load(json_file)
    # pprint(config)
    # print('-' * 50)
    # mysql_host = config['mysql']['host']
    # mysql_port = config['mysql']['port']
    # print(f'mysql_host: {mysql_host}')
    # print(f'mysql_port: {mysql_port}')

    ''' 2、通过 .update(config)可以将 config 字典内容转为变量 '''
    globals().update(config)
    pprint(config)
    mysql_user = mysql['user']
    print(f'mysql_user: {mysql_user}')

四、Python3使用 py 配置文件

4.1 py 配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
$ cat config/gitlab_config.py
DEBUG = True

db_config_info = {
    "db_host": "192.168.10.100",
    "db_name": "dbname",
    "db_user": "dbuser",
    "db_passwd": "dbpawd",
    "db_port": 3306
}

4.2 Python3读取 py 配置文件

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
$ cat read_python_config.py
#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from config.gitlab_config import *

print('read python config...')
print()
""" 读取py格式的配置文件 """
host = db_config_info['db_host']
user = db_config_info['db_user']
passwd = db_config_info['db_passwd']
db = db_config_info['db_name']
port = db_config_info['db_port']

print(host, user, passwd, db, port)

以上四种Python3使用配置文件的方式都非常的方便(在Flask和Django中的使用方式可能略有不同)。
个人认为ini类型的配置文件当然是最简单、最容易使用的。
但是在一些相对较大的项目中还是推荐yamljson类型的配置文件,这两个我更推荐json格式的配置文件,因为比较像Python中的字典,也比较好用。但是相对来说可能可视化没有yaml文件那么好,当然你可以在线jsonyaml,都是没问题的。
相对来说,当配置文件比较多时,可能yaml更易读。
.py的配置文件通常被用来在Python中以导入包的方式使用。

以上四种方式,在写一些脚本但是不像写死或者暴露敏感数据在代码中,同时也方便后期维护的时候不需要动代码带来很大的方便。选择哪一种就自己斟酌吧!

                                    ----- 本页内容已结束,喜欢请分享并注明原文链接 -----
您的鼓励是我最大的动力
alipay QR Code
wechat QR Code

Avatar
作者
ayunw
尼古丁的绑架没有救赎,我们皆是上瘾的囚徒


目录