python3----configparser 读取 ini 文件

发布于 更新于

技术文章测试开发

本文需求:读取配置文件。

本文需求:读取配置文件。

配置文件有很多种,有各种格式,各种格式也有各自的应用场景。

网站上搜索了搜索了一圈,发现python3读取ini文件用的configparser模块。砸门就开始学习吧!

=================================================================

ini文件介绍:

image.png

[]包起来的称为section(节点)

节点可包含多个键值对。键称为option(选项),例如section_1节点下的key1

=================================================================

读configparser模块源码:

    __all__ :就好比你找别人借东西,你只能借,他答应借你的东西范围的借东西。(本质是列表)
    _defalut_dict : 内置列表类的类名
    DEFAULTSECT、MAX_INTERPOLATION_DEPTH 常量

ConfigParser类(继承RawConfigParser):

	文档说明:ConfigParser实现了interpolation(插补)

    set方法:给定section和option来创建option // 问:section存在、section不存在、option存在、option不存在的排列组合
    add_section:在配置文件中创建一个新的section(section传一个str)
    //此类没有初始化方法,说明继承自其调用RawConfigParser的__init__方法。




RawConfigParser(继承MutableMapping(可变映射)):

    init方法中比较有意思的字段:
    1.delimiters(定界符,说明key-value形式,不仅仅能用等号=,也能用冒号:)
    2.comment_prefixes(注释的前缀,说明注释不仅仅能用#号,也能用分号;)


    sections方法:获取所有的节点的名字
    add_sections:添加节点
    has_sections:判断是否存在节点
    options:获取所有选项的名字
    read**的方法:读输入源,输入源可以字典、文件、文件夹等形式
    get方法:从指定的section、option获取value,如果section、option其一不存在就报错。
    set方法:传入section、option,设置一个option,如果section不存在,提示异常。
    write方法:就是一顿操作后,你需要调用这个方法,ini文件中才有你的数据。

其他类和方法有需求自行去了解。

==============================================================================

练习:

创建一个ini文件,例如test.ini

image.png

ps:这里可以关注下 注释的形式和key-value的形式,选择你习惯的方式。

创建一个ini_read.py文件。

确定需求阶段:想一下,你尝尝会用到哪些操作,无非就是读和写。

1.修改值。

2.获取值。

附上代码: ini_read.py

  import configparser


    class OperateIni:
        """
        a class which gets option's value  and sets value
        """
        def __init__(self,filename=None):
            self.cf = configparser.ConfigParser()
            if filename is not None:
                self.filename = filename
            else:
                self.filename = "test.ini"  # 这里直接写文件,是因为ini_read.py和test.ini文件在同一目录下
            self.cf.read(self.filename,"utf-8")


        def get_value(self,section,option):
            return self.cf.get(section,option)

        def set_value(self,section,option,value):
            if not self.cf.has_section(section):
                self.cf.add_section(section)
                self.cf.set(section, option, value)
            else:
                self.cf.set(section,option,value)
            self._write()

        def _write(self):
            with open(self.filename,"w") as f:
                self.cf.write(f)


    if __name__ == '__main__':
        # 获取值
        opi = OperateIni()
        res1 = opi.get_value("section_2","name")
        print(res1)

        # 修改值&&创建键值对
        # section1存在  option不存在
        opi.set_value("section_1", "name5", "9")
        # section不存在  option不存在
        opi.set_value("section_5", "name9", "9")
        # # section1存在 option 存在
        opi.set_value("section_5", "name9", "10")

test.ini:

 [section_1]
    key1 = value1
    key2 = value2
    key3 = value3
    key4 = value4


    [section_2]
    key1 = value1
    key2 = value2
    key3 = value3
    key4 = 545
    name = 1

来源:testingpai

继续阅读