Python如何使用ConfigParser读取配置文件


Posted in Python onNovember 12, 2020

在项目过程中,需要设置各种IP和端口号信息等,如果每次都在源程序中更改会很麻烦(因为每次都要重启项目重新加载配置信息),因此将需要修改的参数写在配置文件(或者数据库)中,每次只需修改配置文件,就可以实现同样的目的。Python 标准库的 ConfigParser 模块提供一套 API 来读取和操作配置文件。因此在程序开始位置要导入该模块,注意区分是python2还是python3,python3有一些改动

import ConfigParser #python 2.x
import configparser #python 3.x

配置文件的格式

  • a) 配置文件中包含一个或多个 section, 每个 section 有自己的 option;
  • b) section 用 [sect_name] 表示,每个option是一个键值对,使用分隔符 = 或 : 隔开;
  • c) 在 option 分隔符两端的空格会被忽略掉
  • d) 配置文件使用 # 和 ; 注释

一个简单的配置文件样例 config.conf

# database source
[db]   # 对应的是一个section
host = 127.0.0.1  # 对应的是一个option键值对形式
port = 3306
user = root
pass = root
 
# ssh
[ssh]
host = 192.168.10.111
user = sean
pass = sean

ConfigParser 的基本操作

a) 实例化 ConfigParser 并加载配置文件

cp = ConfigParser.SafeConfigParser()
cp.read('config.conf')

b) 获取 section 列表、option 键列表和 option 键值元组列表

print('all sections:', cp.sections()) # sections: ['db', 'ssh']
print('options of [db]:', cp.options('db')) # options of [db]: ['host', 'port', 'user', 'pass']
print('items of [ssh]:', cp.items('ssh')) # items of [ssh]: [('host', '192.168.10.111'), ('user', 'sean'), ('pass', 'sean')]

c) 读取指定的配置信息

print('host of db:', cp.get('db', 'host')) # host of db: 127.0.0.1
print('host of ssh:', cp.get('ssh', 'host')) # host of ssh: 192.168.10.111

d) 按类型读取配置信息:getint、 getfloat 和 getboolean

print(type(cp.getint('db', 'port'))) # <type 'int'>

e) 判断 option 是否存在

print(cp.has_option('db', 'host')) # True

f) 设置 option

cp.set('db', 'host','192.168.10.222')

g) 删除 option

cp.remove_option('db', 'host')

h) 判断 section 是否存在

print(cp.has_section('db')) # True

i) 添加 section

cp.add_section('new_sect')

j) 删除 section

cp.remove_section('db')

k) 保存配置,set、 remove_option、 add_section 和 remove_section 等操作并不会修改配置文件,write 方法可以将 ConfigParser 对象的配置写到文件中

cp.write(open('config.conf', 'w'))
cp.write(sys.stdout)

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

Python 相关文章推荐
用Python制作简单的朴素基数估计器的教程
Apr 01 Python
Python中使用OpenCV库来进行简单的气象学遥感影像计算
Feb 19 Python
Python使用pyodbc访问数据库操作方法详解
Jul 05 Python
Python运行不显示DOS窗口的解决方法
Oct 22 Python
基于django ManyToMany 使用的注意事项详解
Aug 09 Python
Python matplotlib生成图片背景透明的示例代码
Aug 30 Python
Python内置方法实现字符串的秘钥加解密(推荐)
Dec 09 Python
python使用梯度下降算法实现一个多线性回归
Mar 24 Python
python由已知数组快速生成新数组的方法
Apr 08 Python
Python用5行代码实现批量抠图的示例代码
Apr 14 Python
查看keras的默认backend实现方式
Jun 19 Python
基于python获取本地时间并转换时间戳和日期格式
Oct 27 Python
Python使用windows设置定时执行脚本
Nov 12 #Python
Django restful framework生成API文档过程详解
Nov 12 #Python
Python通过Schema实现数据验证方式
Nov 12 #Python
Django用户认证系统如何实现自定义
Nov 12 #Python
Django自带用户认证系统使用方法解析
Nov 12 #Python
Django多数据库联用实现方法解析
Nov 12 #Python
Django数据库迁移常见使用方法
Nov 12 #Python
You might like
动态网站web开发 PHP、ASP还是ASP.NET
2006/10/09 PHP
探讨:如何使用PHP实现计算两个日期间隔的年、月、周、日数
2013/06/13 PHP
基于OpenCart 开发支付宝,财付通,微信支付参数错误问题
2015/10/01 PHP
javascript 自定义事件初探
2009/08/21 Javascript
jQuery 数据缓存data(name, value)详解及实现
2010/01/04 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
最短的javascript:地址栏载入脚本代码
2011/10/13 Javascript
js获取下拉列表框中的value和text的值示例代码
2014/01/11 Javascript
extjs 时间范围选择自动判断的实现代码
2014/06/24 Javascript
js实现DOM走马灯特效的方法
2015/01/21 Javascript
全面解析多种Bootstrap图片轮播效果
2016/05/27 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
js下拉菜单生成器dropMenu使用方法详解
2017/08/01 Javascript
浅谈es6中export和export default的作用及区别
2018/02/07 Javascript
nodeJs爬虫的技术点总结
2018/05/13 NodeJs
微信小程序之多列表的显示和隐藏功能【附源码】
2018/08/06 Javascript
JavaScript判断对象和数组的两种方法
2019/05/31 Javascript
Node.js之删除文件夹(含递归删除)代码实例
2019/09/09 Javascript
Vue.js中provide/inject实现响应式数据更新的方法示例
2019/10/16 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
Python Socket使用实例
2017/12/18 Python
Python Paramiko模块的使用实际案例
2018/02/01 Python
[原创]Python入门教程4. 元组基本操作
2018/10/31 Python
python中退出多层循环的方法
2018/11/27 Python
python 实现分组求和与分组累加求和代码
2020/05/18 Python
Python 创建TCP服务器的方法
2020/07/28 Python
Python 如何创建一个简单的REST接口
2020/07/30 Python
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
加拿大著名时装品牌:SOIA & KYO
2016/08/23 全球购物
Hanky Panky官方网站:内衣和睡衣
2019/07/25 全球购物
幼儿园园长自我鉴定
2013/10/22 职场文书
简短的公司员工自我评价分享
2013/11/13 职场文书
求职自荐信范文格式
2013/11/29 职场文书
Golang全局变量加锁的问题解决
2021/05/08 Golang
JS + HTML 罗盘式时钟的实现
2021/05/21 Javascript
MybatisPlus EntityWrapper如何自定义SQL
2022/03/22 Java/Android