Python3中configparser模块读写ini文件并解析配置的用法详解


Posted in Python onFebruary 18, 2020

Python3中configparser模块简介

configparser 是 Pyhton 标准库中用来解析配置文件的模块,并且内置方法和字典非常接近。Python2.x 中名为 ConfigParser,3.x 已更名小写,并加入了一些新功能。

配置文件的格式如下:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = Tom

[topsecret.com]
Port: 50022
ForwardX11: no

“[ ]”包含的为 section,section 下面为类似于 key - value 的配置内容;

configparser 默认支持 ‘=' ‘:' 两种分隔。

configparser 常用方法

初始化实例

使用 configparser 首先需要初始化实例,并读取配置文件:

>>> import configparser
>>> config = configparser.ConfigParser()  # 注意大小写
>>> config.read("config.ini")  # 配置文件的路径
["config.ini"]

或者可以直接读字典

>>> parser = configparser.ConfigParser()
>>> parser.read_dict({'section1': {'key1': 'value1',
...                'key2': 'value2',
...                'key3': 'value3'},
...          'section2': {'keyA': 'valueA',
...                'keyB': 'valueB',
...                'keyC': 'valueC'},
...          'section3': {'foo': 'x',
...                'bar': 'y',
...                'baz': 'z'}
... })

获取所有 sections

>>> config.sections()
['bitbucket.org', 'topsecret.com']  # 注意会过滤掉[DEFAULT]

获取指定 section 的 keys & values

>>> config.items('topsecret.com')
>>>> [('port', '50022'), ('forwardx11', 'no')]  # 注意items()返回的字符串会全变成小写

获取指定 section 的 keys

>>> config.options('topsecret.com')
['Port', 'ForwardX11']
>>> for option in config['topsecret.com']:
...   print(option)
Port
ForwardX11

获取指定 key 的 value

>>> config['bitbucket.org']['User']
'Tom'
>>> config.get('bitbucket.org', 'User')
'Tom'
>>> config.getint('topsecret.com', 'Port')
50022

configparser模块检查

>>> 'DEFAULT' in config
True
>>> 'test' in config['section_test']
False
>>> 'Tom' in config['bitbucket.org']['User']
True
>>> config.has_section('bitbucket.org')
True
>>> config.has_option('section_test', 'test')
False

configparser模块添加

>>> config.add_section('Section_1')
>>> config.set('Section_1', 'key_1', 'value_1')  # 注意键值是用set()方法
>>> config.write(open('config.ini', 'w'))  # 一定要写入才生效

configparser模块删除

>>> config.remove_option('Section_1', 'key_1')
True
>>> config.remove_section('Section_1')
True
>>> config.clear() # 清空除[DEFAULT]之外所有内容
>>> config.write(open('config.ini', 'w'))

关于 [DEFAULT]

[DEFAULT] 一般包含 ini 格式配置文件的默认项,所以 configparser 部分方法会自动跳过这个 section 。

前面已经提到 sections() 是获取不到的,还有删除方法对 [DEFAULT] 也无效:

>>> config.remove_section('DEFAULT')
False
>>> config.clear()
>>> 'DEFAULT' in config
True
>>> 'ForwardX11' in config['DEFAULT']
True
>>> config.sections()
[]

但指定删除和修改 [DEFAULT] 里的 keys & values 是可以的:

>>> config.remove_option('DEFAULT', 'ForwardX11')
True
>>> config.set('DEFAULT', 'ForwardX11','no')
>>> config['DEFAULT']['ForwardX11']
'no'

还有个特殊的是,has_section() 也无效,可以和 in 区别使用

>>> config.has_section('DEFAULT')
False
>>> 'DEFAULT' in config
True

更多关于Python3中configparser模块读写ini文件并解析配置的用法请查看下面的相关链接

Python 相关文章推荐
python使用正则表达式分析网页中的图片并进行替换的方法
Mar 26 Python
利用Python实现网络测试的脚本分享
May 26 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
TensorFlow实现简单卷积神经网络
May 24 Python
python使用正则筛选信用卡
Jan 27 Python
Python去除字符串前后空格的几种方法
Mar 04 Python
Python将列表数据写入文件(txt, csv,excel)
Apr 03 Python
浅析Python3 pip换源问题
Jan 06 Python
Python预测2020高考分数和录取情况
Jul 08 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
Python Django模型详解
Oct 05 Python
Python用any()函数检查字符串中的字母以及如何使用all()函数
Apr 14 Python
Pytorch mask_select 函数的用法详解
Feb 18 #Python
pytorch masked_fill报错的解决
Feb 18 #Python
python分别打包出32位和64位应用程序
Feb 18 #Python
pandas和spark dataframe互相转换实例详解
Feb 18 #Python
PyTorch中Tensor的数据统计示例
Feb 17 #Python
pytorch实现Tensor变量之间的转换
Feb 17 #Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
Feb 17 #Python
You might like
优化PHP代码的53条建议
2008/03/27 PHP
PHP大批量数据操作时临时调整内存与执行时间的方法
2011/04/20 PHP
深入理解ob_flush和flush的区别(ob_flush()与flush()使用方法)
2013/02/06 PHP
PHP $_FILES中error返回值详解
2014/01/30 PHP
解决php表单重复提交实现方法
2015/09/29 PHP
本地图片预览(支持IE6/IE7/IE8/Firefox3)经验总结
2013/03/25 Javascript
Jquery实现弹出层分享微博插件具备动画效果
2013/04/03 Javascript
Javascript中的Array数组对象详谈
2014/03/03 Javascript
jQuery数组处理函数整理
2016/08/03 Javascript
js 获取当前web应用的上下文路径实现方法
2016/08/19 Javascript
使用JS实现图片展示瀑布流效果的实例代码
2016/09/12 Javascript
AngularJS入门教程二:在路由中传递参数的方法分析
2017/05/27 Javascript
简单的三步vuex入门
2018/05/20 Javascript
vue中的v-if和v-show的区别详解
2019/09/01 Javascript
在weex中愉快的使用scss的方法步骤
2020/01/02 Javascript
微信小程序tab左右滑动切换功能的实现代码
2021/02/08 Javascript
[11:57]《一刀刀一天》第十七期:TI中国军团加油!
2014/05/26 DOTA
[01:48]DOTA2 2015国际邀请赛中国区预选赛第二日战报
2015/05/27 DOTA
[44:10]2018DOTA2亚洲邀请赛 4.5 淘汰赛 EG vs VP 第一场
2018/04/06 DOTA
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
Python数据结构与算法之列表(链表,linked list)简单实现
2017/10/30 Python
Python中一行和多行import模块问题
2018/04/01 Python
python 等差数列末项计算方式
2020/05/03 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
英国现代家具和装饰网站:PN Home
2018/08/16 全球购物
维多利亚的秘密官方网站:Victoria’s Secret
2018/10/24 全球购物
巴西最大的珠宝连锁店:Vivara
2019/04/18 全球购物
汽车维修专业毕业生的求职信分享
2013/12/04 职场文书
中班幼儿评语大全
2014/04/30 职场文书
工作所在部门证明
2014/09/21 职场文书
2014年测量员工作总结
2014/12/12 职场文书
党员先进事迹材料
2014/12/19 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
李清照的诗词赏析(20首)
2019/08/22 职场文书
css3带你实现3D转换效果
2022/02/24 HTML / CSS
对讲机知识
2022/04/07 无线电