Python-configparse模块详解与代码示例

目录

引入

INI文件结构

举例

读取配置

节点

获取所有节点

获取指定节点下的所有键

键值对

获取指定节点下的所有键值对

获取指定节点下键对应的值

布尔值获取与设置

检查配置

节点

检查节点是否存在

键值对

检查指定节点的键是否存在

添加配置

节点

添加节点

键值对

向指定节点中添加键值对

删除配置

节点

删除节点

键值对

删除指定节点的键值对

修改配置

修改指定节点的指定键的值

写入配置文件

总结

参考


引入

配置文件在项目中是常见的,一般是.ini或xml等格式,例如,在mysql中就是my.ini进行配置。xml对于非计算机类的用户来说,不是很友好。

Python-configparse模块详解与代码示例_第1张图片 Mysql的简单配置

如果要你写一个配置文件解析器,你有什么思路呢?例如:

  • 文件结构规定,规定参数和值、规定注释
  • 读取配置文件的配置项,配置文件的参数、值的分隔符规定,注释规定等
  • 删除配置文件的配置项
  • 修改配置文件的配置项
  • 添加配置文件的配置项
  • 检查配置文件的配置项
  • ...

INI文件结构

配置文件是由小节组成的,每个小节都有一个 [section] 标头,加上多个由特定字符串 (默认为 = 或 :) 分隔的键/值条目。 默认情况下小节名对大小写敏感而键对大小写不敏感 。键和值开头和末尾的空格会被移除。 值可以被省略,在此情况下键/值分隔符也可以被省略。 值还可以跨越多行,只要其他行带有比值的第一行更深的缩进。 依据解析器的具体模式,空白行可能被视为多行值的组成部分也可能被忽略。
配置文件可以包含注释,要带有指定字符前缀 (默认为 # 或 ;)。 注释可以单独出现于原本的空白行,并可使用缩进。

mysql的简单配置

[mysql]  
# 设置mysql客户端默认字符集  
default-character-set=utf8  
[mysqld]  
#设置3306端口  
port = 3306  
# 设置mysql的安装目录  
basedir=D:\mysql-5.7.20-win32\mysql-5.7.20-win32  
# 设置mysql数据库的数据的存放目录  
datadir=D:\mysql-5.7.20-win32\mysql-5.7.20-win32\data  
# 允许最大连接数  
max_connections=200  
# 服务端使用的字符集默认为8比特编码的latin1字符集  
character-set-server=utf8  
# 创建新表时将使用的默认存储引擎  
default-storage-engine=INNODB

有两个小节,一个是mysql,一个是mysqld。这里使用#来代表后面的是注释,使用=来分隔参数和值。

举例

我们来对mysql的配置文件进行解析

import configparser

configfile = configparser.ConfigParser()
configfile.read(r"D:\mysql-5.7.20-win32\mysql-5.7.20-win32\my.ini")

print(configfile["mysql"]["default-character-set"])
结果

 一般情况下,我们就是得到配置文件的配置项,然后对程序进行配置。当然,也可能在软件刚打开时,用户设置一下,写入配置文件。所以,增删改查是少不了的。接下来,详细看看。

['BOOLEAN_STATES', 'NONSPACECRE', 'OPTCRE', 'OPTCRE_NV', 'SECTCRE', 'add_section', 'clear', 'converters', 'default_section', 'defaults', 'get', 'getboolean', 'getfloat', 'getint', 'ha
s_option
', 'has_section', 'items', 'keys', 'options', 'optionxform', 'pop', 'popitem', 'read', 'read_dict', 'read_file', 'read_string', 'readfp', 'remove_option', 'remove_section', 's
ections', 'set', 'setdefault', 'update', 'values', 'write']

读取配置

节点

获取所有节点

print(configfile.sections())

结果

['mysql', 'mysqld']

获取指定节点下的所有键

print(configfile.options("mysqld"))

结果

['port', 'basedir', 'datadir', 'max_connections', 'character-set-server', 'default-storage-engine']

键值对

获取指定节点下的所有键值对

print(configfile.items("mysqld"))

结果

[('port', '3306'), ('basedir', 'D:\\mysql-5.7.20-win32\\mysql-5.7.20-win32'), ('datadir', 'D:\\mysql-5.7.20-win32\\mysql-5.7.20-win32\\data'), ('max_connections', '200'), ('character-
set-server', 'utf8'), ('default-storage-engine', 'INNODB')]

获取指定节点下键对应的值

mysqld = configfile["mysqld"]
print(mysqld.get("datadir"))

结果

D:\mysql-5.7.20-win32\mysql-5.7.20-win32\data

布尔值获取与设置

从前面可以看到,所有的键和值都认为是字符串。那么如何获取布尔值呢?

官方给了getboolean函数

在配置文件中,添加

#布尔值
bool = False

print(type(mysqld.getboolean("bool")), mysqld.getboolean("bool"))

结果

False

配置解析器会将下列值视为 True: '1', 'yes', 'true', 'on' 而将下列值视为 False: '0', 'no', 'false', 'off'

有的时候,可能配置简单,懒得写配置功能,直接让用户来修改配置文件,通过注释来提示用户。但是off、false等对非计算机专业用户来说有些难。我们可以修改一下布尔值的判定

配置文件中添加:

# 是否开启命运之门? 打开或关闭
Door of Destiny = 打开 

代码添加:

# 设置布尔值
configfile.BOOLEAN_STATES["打开"] = True
configfile.BOOLEAN_STATES["关闭"] = False
print(mysqld.get("Door of Destiny"))
print(type(mysqld.getboolean("Door of Destiny")), mysqld.getboolean("Door of Destiny"))

结果:

打开
True

对于float、int,可以使用getfloat和getint,也可以自己使用int、float进行转换

检查配置

在查看、添加、删除、修改之前,我们都应该检查一下是否存在。

节点

检查节点是否存在

print(configfile.has_section("mysql"))
print(configfile.has_section("yoursql"))

结果

True
False

键值对

检查指定节点的键是否存在

print(configfile.has_option("mysqld", "default-character-set"))
print(configfile.has_option("mysqld", "port"))

结果

False
True

添加配置

节点

添加节点

configfile.add_section("delete")
configfile.add_section("info")

键值对

向指定节点中添加键值对

configfile.set("info", "author", "lady_killer9")
configfile.set("info", "time", "now")

删除配置

节点

删除节点

configfile.remove_section("delete")

键值对

删除指定节点的键值对

configfile.remove_option("info", "time")

修改配置

修改指定节点的指定键的值

和添加一样

configfile.set("info", "author", "frankyu")

写入配置文件

以上的添加、删除、修改只是在内存中,需要写到文件中使用write,传入文件函数

configfile.write(open(r"D:\mysql-5.7.20-win32\mysql-5.7.20-win32\my.ini", "w"))

Python-configparse模块详解与代码示例_第2张图片

总结

配置文件解析类似字典,实现了增加、删除、修改、查看、检查功能,一般我们会通过parser['section']['option']获取配置项,然后对程序进行设置。

参考

configparse

更多python相关内容:【python总结】python学习框架梳理

本人b站账号:lady_killer9

有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。如果您感觉有所收获,自愿打赏,可选择支付宝18833895206(小于),您的支持是我不断更新的动力。

你可能感兴趣的:(python,python)