是我,是你
环境:
Pycharm
Python 3.9.16
回顾上篇
数据库连接池PooledDB连接MySQL,操作性能比对
九月de云,公众号:九月de云python巧妙使用数据库连接池PooledDB连接MySQL,操作性能比对
开始本篇
python标准库中有一个内置的configparser模块,可以很方便地操作.ini格式的配置文件。
接下来看看如何开始使用吧!
首先需要导入configparser 模块:
import configparser
然后实例化一个ConfigParser对象,并读取相应的.ini 文件:
config = configparser.ConfigParser()
config.read('conf.ini')
最后就是新增、修改、查询、删除的操作了,继续往下看
新增section
前提是在conf.ini文件中,所新增的section不存在
config.add_section('USER1')
with open('conf.ini', 'w') as f:
config.write(f)
结果:
如果section已经存在,则会报异常
configparser.DuplicateSectionError: Section 'USER1' already exists
所以,为了避免报异常,可以在新增section之前,先看一下section是否存在
is_exist = config.has_section('USER1')
True:代表存在
False:代表不存在
新增option
在指定section下新增选项option,并赋值
config.set('USER1', 'access_key', 'e1b5000c484a6fABC0526Ag046C1189e')
with open('conf.ini', 'w') as f:
config.write(f)
结果:
如果指定的section不存在,则会报异常,所以在这步操作之前,要先新增相应的section。
如果在指定section下,选项option存在,那么这个新增的操作就会变成修改option的值,即新增与修改同用此方法
所以,为了区分操作新增option,还是修改option,可以先判断指定的option是否存在,最后再决定是否做修改操作。
is_exist = config.has_option('USER1', 'access_key')
True:代表存在
False:代表不存在
查询获取
获取ini文件中所有的section,返回是一个列表(list)
sections = config.sections()
获取ini文件中指定section的所有选项option,返回是一个列表(list)
options = config.options('USER1')
获取ini文件中指定section的所有键值对,即所有option和对应的值,返回是一个列表(list),键值对在列表中是元组形式
items = config.items('USER1')
由于返回的结果为列表+元组形式在后面获取的时候不如字典方便,在这里可以处理成返回字典形式:
根据实际情况而定 |
获取ini文件中指定section中,指定option的值,返回是一个字符串
value = config.get('USER1', 'access_key')
删除
删除指定的section
config.remove_section('USER1')
with open('conf.ini', 'w') as f:
config.write(f)
删除指定的section下的某个option
config.remove_option('USER1', 'access_key')
with open('conf.ini', 'w') as f:
config.write(f)
整体封装
为了方便后期调用, 更符合实际需求,本次进行整体封装
# -*- coding: utf-8 -*-
import configparser
class ini_tools:
def __init__(self, file_path):
self.fp = file_path
self.config = configparser.ConfigParser()
self.config.read(self.fp, encoding='utf-8')
def write(self):
"""
ini文件变更操作后,回写入文件
:return:
"""
with open(self.fp, 'w') as f:
self.config.write(f)
def has_section(self, section):
"""
判断指定的section是否存在
:param section: section名
:return: bool, True-代表存在 ,False-代表不存在
"""
is_has = self.config.has_section(section)
return is_has
def has_option(self, section, option):
"""
判断指定的section下,某个option是否存在
:param section: section名
:param option: option名
:return: bool, True-代表存在 ,False-代表不存在
"""
is_has = self.config.has_option(section, option)
return is_has
def add_section(self, section):
"""
为ini文件添加新的section, 如果section已经存在则抛出异常
:param section: section名
:return:
"""
self.config.add_section(section)
self.write()
def set_option(self, section, option, value):
"""
对指定section下的某个option赋值,如果section不存在则抛出异常
如果在指定section下,选项option存在,那么这个新增的操作就会变成修改option的值,即新增与修改同用此方法
:param section: section名
:param option: option名
:param value: 值
:return:
"""
self.config.set(section, option, value)
self.write()
def get_sections(self):
"""
获取ini文件中所有的section,返回是一个列表(list)
:return:
"""
sections = self.config.sections()
return sections
def get_options(self, section):
"""
获取ini文件中指定section的所有选项option,返回是一个列表(list)
:param section: section名
:return:
"""
return self.config.options(section)
def get_items(self, section):
"""
获取指定section的所有键值对
:param section: section名
:return: section的所有键值对(字典形式)
"""
result_ = self.config.items(section)
result = {key: value for key, value in result_}
return result
def get_option(self, section, option):
"""
:param section: section名
:param option: 传入项
:return: 返回项的值(string类型)
"""
return self.config.get(section, option)
def remove_section(self, section):
"""
删除某个section
:param section: section名
:return:
"""
self.config.remove_section(section)
self.write()
def remove_option(self, section, option):
"""
删除某个section下的某个option
:param section: section名
:param option: option名
:return:
"""
self.config.remove_option(section, option)
self.write()
总结
以上使用的conf.ini文件,在实际操作之前,需要提前新建。
使用建议:
灵活使用has_section()和has_option()方法判断,去操作ini文件时,如果在程序里面找不到section会报异常,或是修改了原来的option造成失误,会缺少一些严谨性。
文章就分享到这儿,喜欢就点个赞吧!