1.需求:最近有个想法是想用python3去做web自动化(selenium)。
2.写文章的目的:记录总结下.
==================================================================
本文需求:读取配置文件。python读取ini文件
配置文件有很多种,有各种格式,各种格式也有各自的应用场景。
网站上搜索了搜索了一圈,发现python3读取ini文件用的configparser模块。砸门就开始学习吧!
=================================================================
[]包起来的称为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
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