Python3读写ini配置文件的示例


Posted in Python onNovember 06, 2020

ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑。
配置文件的主要功能就是存储一批变量和变量值,在ini文件中使用[章(Section)]对变量进行了分组,基本格式如下。

# filename: config.ini
[user]
name=admin
password=123456
is_admin=true

[mysql]
host=10.10.10.10
port=3306
db=apitest
user=root
password=123456

[log]
file=run.log
level=info

以上文件中,有3个Section段,分别user、mysql和log。
使用配置文件的好处在于,不用修改代码文件就可以更改使用的用户、数据库以及日志的配置,避免修改代码带来新的bug,或需要重新打包(如Java项目中)。

ini文件中使用#或者;添加注释,最好独占一行,不能写在变量后面

读取

读取ini配置文件需要使用Python3自带的configparser库,使用示例如下

from configparser import ConfigParser  # Python2中是from ConfigParser import ConfigParser
conf = ConfigParser() # 需要实例化一个ConfigParser对象
conf.read('config.ini') # 需要添加上config.ini的路径,不需要open打开,直接给文件路径就读取,也可以指定encoding='utf-8'
print(conf['user']['name']) # 读取user段的name变量的值,字符串格式

conf对象每个section段的数据类似于一个字典,可以使用['变量名']或者.get('变量名')获取对应的值,获取到的是字符串格式。
其他常用的读取方法如下:

  • conf.sections(): 获取所有的section名,结果['user', 'mysql', 'log']
  • conf['mysql']['port']: 获取section端port变量的值,字符串格式
  • conf['mysql'].get('port'): 同上,字符串格式
  • conf.get('mysql', 'port'): 同上,字符串格式
  • conf['mysql'].getint('port'): 获取对应变量的整型值
  • conf['mysql'].getfloat('port'): 获取对应变量的浮点型值
  • conf['user'].getboolean('is_admin'): 获取对应变量的布尔值,支持配置为yes/no, on/‘off, true/false 和 1/0,都可以转化为Python中的True/False
  • conf.has_section(section):检查是否有该section
  • conf.options(section):输出section中所有的变量名
  • conf.has_option(section, option):检查指定section下是否有该变量值

如果想遍历一个section所有的变量和值,可以像遍历字典意义操作,示例如下。

for key, value in conf['mysql'].items():
  print(key, value)

注意:ini文件中的变量名是大小写不敏感的,而Section名是大小写敏感的。

公共变量

假如我们每个Section变量组都有一批相同的重复变量,如:

[dev]
# 开发环境
user=admin
password=123456
base_url=http://localhost:7777

[test]
# 测试环境
user=admin
password=123456
base_url=http://test.abc.com

[prod]
# 生产环境
user=admin
password=123456
base_url=http://www.abc.com

对应这种,我们可以设置[DEFAULT]段公用变量,公用变量会自动添加到每一个段中,修改后如下。

[DEFAULT]
user=admin
password=123456

[dev]
# 开发环境
base_url=http://localhost:7777

[test]
# 测试环境
base_url=http://test.abc.com

[prod]
# 生产环境
base_url=http://www.abc.com

在Python文件中使用conf['test']['user']同样能获取到变量的值。

参数化

在ini文件中我们还可以使用%(变量名)s的占位符进行参数化,这种特性被称为Interpolation(插值)。
比如一个接口,不同的参数对应不同的场景,示例如下。

[DEFAULT]
url = %(base_url)s/get?a=%(a)s&b=%(b)s
base_url=https://httpbin.org

[dev]
# 开发环境
base_url=http://localhost:5555
a=1
b=2

[prod-case1]
# 生成环境-场景1
a=1
b=2

[prod-case2]
# 生成环境-场景2
a=kevin
b=male

上例中,我们在[DEFAULT]段设置了一个参数化的公用变量url,其中埋设了三个占位符,%(base_url)s、%(a)s、和%(b)s。
并且我们设置了base_url变量的默认值为https://httpbin.org。
当下面的section中没有覆盖该变量时,如prod-case1和prod-case2中,是用base_url的默认值。

注意:每个section段中,加上默认变量base_url,必须提供所有参数化变量的值,比如此例中每个段最少必须设置a和b的值,否则会报错。

在Python脚本中打印conf['prod-case2']['url'],可以得到组装后的url。

https://httpbin.org/get?a=kevin&b=male

修改保存

conf对象常用的修改如下:

  • conf.add_section(section):添加section
  • conf.set(section, option, value): 在指定section中添加变量和变量值,section必须存在或已添加,value必须为字符串形式,可以设置DEFAULT字段的值
  • conf.remove_option(section, option):移除指定section下指定变量
  • conf.remove_section(section):移除section
  • conf.write(f):保存ini文件

动态组装conf文件,示例如下。

from configparser import ConfigParser
from configparser import ConfigParser

conf = ConfigParser()

# conf.read('httpbin.ini', encoding='utf-8') # 如果新建的话就不需要read,如果修改则需要使用read打开

conf.set('DEFAULT', 'url', '%(base_url)s/get?a=%(a)s&b=%(b)s') # 可以设置DEFAULT段的值
conf.set('DEFAULT', 'base_url', 'https://httpbin.org') # 可以设置DEFAULT段的值
conf.add_section('dev')
conf.set('dev', 'base_url', 'http://localhost:5555')
conf.set('dev', 'a', '1') # 值必须是字符串
conf.set('dev', 'b', '2')

conf['prod-case1'] = {'a': 1, 'b': 2} # 直接使用字典添加多个变量
conf['prod-case2'] = {'a': 'kevin', 'b': 'male'}

print(conf.get('dev', 'url'))
print(conf.get('prod-case1', 'url'))
print(conf.get('prod-case2', 'url'))

# 保存csv
with open('httpbin.ini', 'w', encoding='utf-8') as f:
  conf.write(f)

运行打印结果如下:

http://localhost:5555/get?a=1&b=2
https://httpbin.org/get?a=1&b=2
https://httpbin.org/get?a=kevin&b=male

生成的文件内容如下。

[DEFAULT]
url = %(base_url)s/get?a=%(a)s&b=%(b)s
base_url = https://httpbin.org

[dev]
base_url = http://localhost:5555
a = 1
b = 2

[prod-case1]
a = 1
b = 2

[prod-case2]
a = kevin
b = male

以上就是Python3读写ini配置文件的示例的详细内容,更多关于python 读写ini的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python和shell变量互相传递的几种方法
Nov 20 Python
pymongo实现控制mongodb中数字字段做加法的方法
Mar 26 Python
python字典排序实例详解
May 20 Python
Python基于PyGraphics包实现图片截取功能的方法
Dec 21 Python
python 实现登录网页的操作方法
May 11 Python
Python重新加载模块的实现方法
Oct 16 Python
Python实战购物车项目的实现参考
Feb 20 Python
python中嵌套函数的实操步骤
Feb 27 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Django QuerySet查询集原理及代码实例
Jun 13 Python
Python实现ElGamal加密算法的示例代码
Jun 19 Python
python中逻辑与或(and、or)和按位与或异或(&、|、^)区别
Aug 05 Python
Python Serial串口基本操作(收发数据)
Nov 06 #Python
python基于exchange函数发送邮件过程详解
Nov 06 #Python
Python Unittest原理及基本使用方法
Nov 06 #Python
python中的yield from语法快速学习
Nov 06 #Python
Python通过字典映射函数实现switch
Nov 06 #Python
Python使用grequests并发发送请求的示例
Nov 05 #Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
Nov 05 #Python
You might like
PHP最常用的ini函数分析 针对PHP.ini配置文件
2010/04/22 PHP
ThinkPHP中URL路径访问与模块控制器之间的关系
2014/08/23 PHP
PHP+MYSQL实现用户的增删改查
2015/03/24 PHP
PHP实现操作redis的封装类完整实例
2015/11/14 PHP
防止文件缓存的js代码
2013/01/10 Javascript
jquery获取tagName再进行判断
2014/05/29 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
JS实现兼容性好,自动置顶的淘宝悬浮工具栏效果
2015/09/18 Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
2016/06/06 Javascript
AngularJS基础 ng-cloak 指令简单示例
2016/08/01 Javascript
jquery结合html实现中英文页面切换
2016/11/29 Javascript
利用Node.js检测端口是否被占用的方法
2017/12/07 Javascript
Vue-component全局注册实例
2018/09/06 Javascript
vue-awesome-swiper 基于vue实现h5滑动翻页效果【推荐】
2018/11/08 Javascript
小程序红包雨的实现示例
2019/02/19 Javascript
微信小程序实现带参数的分享功能(两种方法)
2019/05/17 Javascript
30分钟用Node.js构建一个API服务器的步骤详解
2019/05/24 Javascript
Vue+Element UI 树形控件整合下拉功能菜单(tree + dropdown +input)
2020/08/28 Javascript
javascript实现点击产生随机图形
2021/01/25 Javascript
Python实现的多线程端口扫描工具分享
2015/01/21 Python
Python 3.x 安装opencv+opencv_contrib的操作方法
2018/04/02 Python
anaconda如何查看并管理python环境
2019/07/05 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
python 基于pygame实现俄罗斯方块
2021/03/02 Python
HTML+CSS+JavaScript实现图片3D展览的示例代码
2020/10/12 HTML / CSS
BONIA波尼亚新加坡官网:皮革手袋,鞋类和配件
2016/08/25 全球购物
Strawberrynet草莓网新加坡站:护肤、彩妆、香水及美发产品
2018/08/31 全球购物
团支书的期末学习总结自我评价
2013/11/01 职场文书
应届毕业生的自我鉴定
2013/11/13 职场文书
《纸船和风筝》教学反思
2014/02/15 职场文书
党员一句话承诺大全
2014/03/28 职场文书
质量提升方案
2014/06/16 职场文书
护理专科学生自荐书
2014/07/05 职场文书
药店采购员岗位职责
2014/09/30 职场文书
Oracle表空间与权限的深入讲解
2021/11/17 Oracle
小程序实现侧滑删除功能
2022/06/25 Javascript