编写 python 的几种 config 处理方式

编写分析流程时候,为了兼容性总会设置一些常用选项配置文件输入,不同配置方式各有一些特点,就用过的几种配置方式简单整理

script —— config.py

1
2
3
4
5
6
import os
import sys
# sys.path.insert(0, 'config_py_dirname') # 使config.py文件位于PYTHONPATH路径下
import config

option = config.option # 获取配置信息

书写方式完全按照python脚本进行,可读性较高,问题在于PYTHONPATH的处理,脚本环境内键值对可能产生的覆盖问题,准确导入分析流程

configparser —— config.ini

1
2
3
4
5
6
7
8
9
10
11
12
import configparser    # python3
# import Configparser as configparser # python2

cf = configparser.ConfigParser()
cf.read('config.ini')

sections = cf.sections() # 列出所有section
options = cf.options(section) # 列出section对应的所有option
value = cf.get(section,option) # 范围section对应option的值,string
# getint(section,option) 返回为int,
# getboolean(section,option) 返回bool,
# getfloat(section,option) 返回float

但是,在configparser模块中不区分section, option大小写,一次读取一条配置信息

json —— config.json

1
2
3
4
5
6
7
8
9
import json

# 倒入配置json到python环境,config类型跟json内容相关
with open('config.json') as f:
config = json.load(f)

# 输出python对象到json文件
with open('whatever.josn', 'w') as f:
json.dump(config, f, indent=2)

json文件格式要求较严格,书写配置文件容易手误出错,相比之下更适用于流程中数据传递

yaml —— config.yaml

1
2
3
4
import yaml

with open('config.yaml') as f:
config = yaml.load(f) # dict OR list

YAML 语法规则

  • 大小写敏感
  • 使用缩进表示层级关系
  • 使用空格缩进,不允许使用Tab键
  • 相同层级的元素左侧对齐即可
  • 使用 # 作为注释符号
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 表示 key-value 对
key1: value2
key2: value2

# 表示 list
- value1
- value2
# [value1, value2]

# 时间表示
date: 2018-05-24 # iso8601

# None表示
key: ~

# bool表示
flag1: true
flag2: false

相比于上面几种方法,yaml可读性高,容易书写,不用考虑PYTHONPATH问题,批量导入配置信息

---------本文结束,感谢您的阅读---------