Python configparser模块封装及构造配置文件


Posted in Python onAugust 07, 2020

1.configparser模块简介

使用配置文件来灵活的配置一些参数是一件很常见的事情,配置文件的解析并不复杂,在python里更是如此,在官方发布的库中就包含有做这件事情的库,那就是configParser

configParser解析的配置文件的格式比较象ini的配置文件格式,就是文件中由多个section构成,每个section下又有多个配置项

2.看一下configparser生成的配置文件的格式

ini配置文件格式如下:

这里是注释

[log]
log_path = base_dir/OutPut/log/

[image]
img_path = base_dir/OutPut/image/

[report]
report_path = base_dir/OutPut/report/

[test_case]
test_case_path = base_dir/TestData/case.xlsx

3.读取文件内容

import configparser
import os
import sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.dirname(__file__)))

if sys.platform == "win32":
  ENV_CONF_DIR = os.path.join(BASE_DIR, 'Common/conf/env_config.ini').replace('/', '\\')
else:
  ENV_CONF_DIR = os.path.join(BASE_DIR, 'Common/conf/env_config.ini')

class Config(object):

  def __init__(self, path):
    self.path = path #配置文件名
    self.cf = configparser.ConfigParser() #创建一个配置文件对象
    self.cf.read(self.path, encoding='utf-8') # 调用配置文件对象的读取方法,并传入一个配置文件名

  def get(self, field, key): # 获取字符串类型的选项值
    result = ""
    try:
      result = self.cf.get(field, key)
    except:
      result = ""
    return result

  def set(self, field, key, value):
    try:
      self.cf.set(field, key, value)
      self.cf.write(open(self.path, 'w'))#创建一个配置文件并将获取到的配置信息使用配置文件对象的写入方法进行写入
    except:
      return False
    return True

def r_config(config_file_path, field, key):
  rf = configparser.ConfigParser()
  try:
    rf.read(config_file_path, encoding='utf-8')
    if sys.platform == "win32":
      result = rf.get(field, key).replace('base_dir', str(BASE_DIR)).replace('/', '\\')
    else:
      result = rf.get(field, key).replace('base_dir', str(BASE_DIR))
  except:
    sys.exit(1)
  return result
def w_config(config_file_path, field, key, value):
  wf = configparser.ConfigParser()
  try:
    wf.read(config_file_path)
    wf.set(field, key, value)
    wf.write(open(config_file_path, 'w'))
  except:
    sys.exit(1)
  return True
if __name__ == '__main__':
  print(r_config(ENV_CONF_DIR, 'log', 'log_path'))
  print(r_config(ENV_CONF_DIR, 'DB', 'database'))

Python configparser模块封装及构造配置文件

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python中Genarator函数用法分析
Apr 08 Python
详解Python中for循环的使用
Apr 14 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
TensorFlow 合并/连接数组的方法
Jul 27 Python
浅析Python四种数据类型
Sep 26 Python
浅谈Python中的全局锁(GIL)问题
Jan 11 Python
python 申请内存空间,用于创建多维数组的实例
Dec 02 Python
np.dot()函数的用法详解
Jan 17 Python
Python实现EM算法实例代码
Oct 04 Python
python Scrapy框架原理解析
Jan 04 Python
python内置进制转换函数的操作
Jun 02 Python
Python logging模块进行封装实现原理解析
Aug 07 #Python
Python定时任务APScheduler安装及使用解析
Aug 07 #Python
Python如何解除一个装饰器
Aug 07 #Python
解决Pycharm双击图标启动不了的问题(JetBrains全家桶通用)
Aug 07 #Python
Python实现上下文管理器的方法
Aug 07 #Python
Python 读取位于包中的数据文件
Aug 07 #Python
Python如何绘制日历图和热力图
Aug 07 #Python
You might like
克隆一个新项目的快捷方式
2013/04/10 PHP
PHP中substr()与explode()函数用法分析
2014/11/24 PHP
Linux系统中设置多版本PHP共存配合Nginx服务器使用
2015/12/21 PHP
PHP addslashes()函数讲解
2019/02/03 PHP
JavaScript中数据结构与算法(四):串(BF)
2015/06/19 Javascript
javascript中substring()、substr()、slice()的区别
2015/08/30 Javascript
整理Javascript流程控制语句学习笔记
2015/11/29 Javascript
Js与Jq获取浏览器和对象值的方法
2016/03/18 Javascript
微信js-sdk分享功能接口常用逻辑封装示例
2016/10/13 Javascript
Angular.JS判断复选框checkbox是否选中并实时显示
2016/11/30 Javascript
详解js中常规日期格式处理、月历渲染和倒计时函数
2016/12/28 Javascript
React-Native实现ListView组件之上拉刷新实例(iOS和Android通用)
2017/07/11 Javascript
详解基于 axios 的 Vue 项目 http 请求优化
2017/09/04 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
基于vue-cli、elementUI的Vue超简单入门小例子(推荐)
2019/04/17 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
vue项目实现设置根据路由高亮对应的菜单项操作
2020/08/06 Javascript
微信小程序以7天为周期连续签到7天功能效果的示例代码
2020/08/20 Javascript
Python translator使用实例
2008/09/06 Python
详解 Python中LEGB和闭包及装饰器
2017/08/03 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
浅谈Python 多进程默认不能共享全局变量的问题
2019/01/11 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
python实现字典嵌套列表取值
2019/12/16 Python
Python利用imshow制作自定义渐变填充柱状图(colorbar)
2020/12/10 Python
HTML5 script元素async、defer异步加载使用介绍
2013/08/23 HTML / CSS
HTML5学习笔记之History API
2015/02/26 HTML / CSS
澳大利亚手表品牌:Time IV Change
2018/10/06 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
渗透攻击的测试步骤
2014/06/07 面试题
医学院毕业生自荐信
2013/11/08 职场文书
给全校老师的建议书
2014/03/13 职场文书
大学新闻系自荐书
2014/05/31 职场文书
2016党校学习心得体会
2016/01/07 职场文书
Anaconda配置各版本Pytorch的实现
2021/08/07 Python