python3---configparser读取ini文件

1.需求:最近有个想法是想用python3去做web自动化(selenium)。

2.写文章的目的:记录总结下.

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

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

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

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

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

ini文件介绍:
python3---configparser读取ini文件_第1张图片

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

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

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

读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)
ps:此类没有初始化方法,说明继承自其调用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文件,例如test.ini

python3---configparser读取ini文件_第2张图片

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

你可能感兴趣的:(python3.8学习)