python操作.ini文件增、删、改、查,二次独立封装

文摘   科技   2023-06-07 18:59   广东  


是我,是你


在网上看到王朔曾说的一句话:
“所谓的活得明白,最重要的一件事就是绝不把评判标准交给别人,一旦把评判标准交给别人,就完全没活明白。”


环境:

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')

由于返回的结果为列表+元组形式在后面获取的时候不如字典方便,在这里可以处理成返回字典形式:

items_ = config.items('USER1')items = {key: value for key, value in items_}


根据实际情况而定


获取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造成失误,会缺少一些严谨性。




     

文章就分享到这儿,喜欢就点个吧!




推荐阅读  点击标题可跳转



ISEE小栈
没有花里胡哨,简单才是王道。
 最新文章