前言:目前我们使用的绝大多数计算机程序,无论是办公软件,浏览器,甚至游戏、视频都是通过菜单界面系统配置的,它几乎成了我们使用机器的默认方式。而在python中,也有这样的一个配置模块可以把代码可配置化。
什么是配置文件 这里的配置文件不同于我们平常所见的可视化的菜单界面,它是像代码形式的,如下示例:
: question:为什么要做配置文件?
: heavy_check_mark:让代码和配置都变成可模块化可配置化,提高代码的重用性,那什么时候把它变成可配置化呢?多处地方都用到一个参数时,经常会变化的参数等,都可以可配置化,我们只需要在配置文件中进行修改即可,不需要在代码中一处处的重复修改。
Python提供了一个ConfigParser模块,它实现了一种基本的配置文件解析器语言,该语言提供的结构类似于 .ini 文件中的结构。常见的配置文件格式有 .ini .conf .cfg ,配置文件由两个文件对象组成:section和option,一个配置文件里可以包含一个或多个节(section),每个节可以有多个option(键=值),如上图所标示。
读取配置文件 它与file文件一样,需要先打开才能进行读取操作,常用方法如下:
read(filename) sections() options(section) items(section) get(section,option) getint(section,option)
以上图中的 conf.ini 为例进行读取操作:
from configparser import ConfigParser # 创建一个操作配置文件的对象(文件解析对象) conf = ConfigParser() # 读取配置文件 conf.read("conf.ini", encoding="utf8") # 获取所有section res2 = conf.sections() print("这是res2:{}n".format(res2)) # 获取对应section下的option res3 = conf.options("logging") print("这是res3:{}n".format(res3)) # 获取对应section下的所有键值对 res4 = conf.items("logging") print("这是res4:{}n".format(res4)) # get方法:读取出来的内容,都是字符串 res5 = conf.get("logging", "level") print("这是res5:{}".format(res5), type(res5)) # getint方法:读取出来的内容,都是int类型 res6 = conf.getint("mysql", "port") print("n这是res6:{}".format(res6), type(res6))
运行结果:
C:softwarepythonpython.exe D:/learn/test.py 这是res2:['logging', 'mysql'] 这是res3:['level', 'f_level', 's_level'] 这是res4:[('level', 'DEBUG'), ('f_level', 'DEBUG'), ('s_level', 'ERROR')] 这是res5:DEBUG这是res6:3306 Process finished with exit code 0
除了可以读取str、int类型以外,还支持float、boolean,这里就不再举例。
: balloon: 小知识:
- 键值对可用 = 也可用 : 进行分隔
- section 名称是区分大小写的,而option不区分
- 键值对中,首尾若有空白符会被去掉
- 配置文件中也可以写入注释,注释以 # 或者 ; 为前缀
基本的写入方法如下:
add_section(section) set( section, option, value)
from configparser import ConfigParser # 创建一个操作配置文件的对象(文件解析对象) conf = ConfigParser() conf.add_section('test') conf.set('test', 'name', 'Amy') conf.write(open('conf.ini', "a", encoding="utf-8"))
运行后查看 conf.ini 文件里面的内容:
一次封装,一劳永逸,之后直接调用即可,封装内容按需。
from configparser import ConfigParser class MyConf: def __init__(self, filename, encoding="utf8"): self.filename = filename self.encoding = encoding self.conf = ConfigParser() self.conf.read(filename, encoding) def get_str(self, section, option): return self.conf.get(section, option) def get_int(self, section, option): return self.conf.getint(section, option) def get_float(self, section, option): return self.conf.getfloat(section, option) def get_bool(self, section, option): def write_data(self, section, option, value): self.conf.set(section, option, value) self.conf.write(open(self.filename, "a", encoding=self.encoding)) if __name__ == '__main__': print(conf.get_str("conf.ini", "test","name")) # 测试
如果对软件测试、接口测试、自动化测试、持续集成、面试经验。感兴趣可以进到806549072,群内会有不定期的分享测试资料。还会有技术大牛,业内同行一起交流技术