Python ini配置文件操作

".ini"(即Initialization file),意为初始化文件,常常用于配置文件,包含环境参数、设定参数等等,它十分简洁,而且处理方便,以下是它的基本格式和通过Python对它完成基本的读写操作。

1、ini文件基本格式

下面是一个ini文件

[DEFAULT]
stu5 = 66

[s_name]
ini = 
option = student_name
stu1 = xh
stu2 = wk
stu3 = ky
stu4 = 88

[s_no]
option = student_no
stu2 = 23
stu3 = 34

[s_title]
option

        ini文件有两个基本的组成部分一是section(块),二是option(项),其中section由方括号和方括号中的名字组成,section的范围是当前方括号到下一个方括号的内容,section与section之间不能重名,区分大小写,option是section中的配置项,由key与value组成的键值对构成,一组key-value构成一个项,如key1 = value1(key与value之间用"="或者":");用" ; " 或者" # "表示注释,在ini文件中有一个特殊的section,[DEFAULT],当其他section获取不到值时用该default下的option作为备用值。

2、ini文件常见操作

        在Python中通过ConfigParser模块对ini进行读写操作,常用方法有: 

        读操作

        read(filename) 读取文件内容(当配置文件有中文时,在调用read()方法时,需要传encoding="utf-8-sig"参数 

        sections() 获取所有的section,以列表形式返回

        options(section)  获取指定section的所有options,以列表形式返回

        items(section)  获取指定section的所有键值对,以列表形式返回

        get(section, option)  获取指定option的值,返回类型string
        

        写操作

        write(fp) 将config对象写入ini文件

        add_section(section) 添加一个新的section

        set(section, option, value) 对指定section下的某个option赋值

        remove_section(section) 删除某个section

        remove_option(section, option) 删除某个section下的某个option

3、栗子

# -*- coding: utf-8 -*-
# description: ini 文件处理

import configparser

class dispose_ini:
    """
    封装一个类,进行ini文件的常用操作
    """
    def __init__(self, filepath):
        self._path = filepath
        self.config = configparser.ConfigParser()  # 实例化解析对象
        self.config.read(filepath, encoding='utf-8')  # 读文件

    def get_sections(self):
        """
        获取ini文件所有的块,返回为list
        """
        sect = self.config.sections()
        return sect

    def get_options(self, sec):
        """
        获取ini文件指定块的项
        :param sec: 传入的块名
        :return: 返回指定块的项(列表形式)
        """
        return self.config.options(sec)

    def get_items(self, sec):
        """
        获取指定section的所有键值对
        :param sec: 传入的块名
        :return: section的所有键值对(元组形式)
        """
        return self.config.items(sec)

    def get_option(self, sec, opt):
        """
        :param sec: 传入的块名
        :param opt: 传入项
        :return: 返回项的值(string类型)
        """
        return self.config.get(sec, opt)

    def write_(self):
        """ 将修改后写入文件 """
        with open(self._path, 'w') as fp:
            self.config.write(fp)

    def add_section_(self, sec):
        """
        为ini文件添加新的section, 如果section 已经存在则抛出异常
        :param sec: 传入的块名
        :return: None
        """
        self.config.add_section(sec)
        self.write_()

    def set_option(self, sec, opt, value):
        """
        对指定section下的某个option赋值
        :param sec: 传入的块名
        :param opt: 传入的项名
        :param value: 传入的值
        :return:  None
        """
        self.config.set(sec, opt, value)
        self.write_()  # 写入文件

    def remove_sec(self, sec):
        """
        删除某个section
        :param sec: 传入的块名
        :return: bool
        """
        self.config.remove_section(sec)
        self.write_()  # 写入文件

    def remove_opt(self, sec, opt):
        """
        删除某个section下的某个option
        :param sec: 传入的块名
        :param opt: 传入的项名
        :return: bool
        """
        self.config.remove_option(sec, opt)
        self.write_()  # 写入文件

if __name__ == '__main__':
    # 加载文件, 初始化
    dis = dispose_ini('./demo.ini')

    # 获取ini文件所有的section
    print(dis.get_sections())

    # 获取指定section的所有options
    print(dis.get_options('s_name'))

    # 获取指定section的所有键值对
    print(dis.get_items('s_name'))

    # 获取指定section指定option的值
    print(dis.get_option('s_name', 'stu4'))

    # 对指定option赋值
    dis.set_option('s_name', 'stu7', '88')

    # 删除指定section
    dis.remove_sec('s_title')

    # 增加section
    dis.add_section_('s_title')

    # 删除指定option
    dis.remove_opt('s_name', 'stu7')

  • 0
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值