1-Python - configparser
about
参考官档,写的很好:https://docs.python.org/zh-cn/3/library/configparser.html
configparser模块适用于配置文件的格式与windows ini文件类似,可以包含一个或多个节(section),每个节可以有多个参数(键=值)。
这个ini
文件就长这样,比如mysql的配置文件my.ini
:
[client]
default-character-set=utf8
[mysql]
user=root
password=123
[mysqld]
# skip-grant-tables
character-set-server=utf8
# sql-mode=""
什么是section和option
我们称呼client mysql mysqld
这些字段为section,称呼其包含的键值对为option,如user=root
等。
创建ini文件
先来看,我们如何创建如跟上面一样的文件:
from configparser import ConfigParser
obj = ConfigParser()
'''
[client]
default-character-set=utf8
[mysql]
user=root
password=123
'''
obj['DEFAULT'] = {'default-character-set': 'utf8'}
obj['client'] = {'default-character-set': 'utf8'}
obj['mysql'] = {'user': 'root', 'password': 123}
with open('./my.ini', 'w') as f:
obj.write(f)
这样,在你脚本的同级目录就生成了一个my.ini
文件。
其实,obj
就相当于一个字典对象,我们只是在创建一个大的字典而已,那么对于该文件的操作,也类似于字典的操作。
操作文件
特殊的DEFAULT字段
有了文件,我们就可以操作它了。
from configparser import ConfigParser
obj = ConfigParser()
file_path = './my.ini'
# 注意,必须先 read,才能查看sections不然为空
print(obj.sections()) # []
obj.read(file_path)
# 以列表的形式返回ini文件的字段名
print(obj.sections()) # ['client', 'mysql']
由打印结果看到,之前创建的DEFAULT
字段并没有返回,而其他的两个字段顺利返回了,这就是我要强调的,DEFAULT
字段是一个特殊的默认字段,这里可以存储一些公共的键值对,我们不仅可以通过DEFAULT
字段获取,也可以通过其他的任何字段获取,谁让它是公共的呢。
其他的两个字段就是普通的字段了,你能从别人卡里取钱?除非叫爸爸!
查操作
from configparser import ConfigParser
obj = ConfigParser()
file_path = './my.ini'
obj.read(file_path)
# print(obj.sections()) # ['client', 'mysql']
# 判断字段是否存在
print('client' in obj) # True
print('client' not in obj) # False
# 取值
print(obj['DEFAULT']['default-character-set']) # utf8
print(obj['mysql']) # <Section: mysql>
for key in obj['mysql']:
print(key)
print(obj['mysql']['user']) # root
# 返回 mysql 字段下所有的键值对
print(obj.items('mysql')) # [('default-character-set', 'utf8'), ('user', 'root'), ('password', '123')]
# 同for循环,取 mysql 字段下所有的键
print(obj.options('mysql')) # ['user', 'password', 'default-character-set']
# get方法取嵌套的值
print(obj.get('mysql', 'user')) # root
增删改
from configparser import ConfigParser
obj = ConfigParser()
file_path = './my.ini'
obj.read(file_path)
# 创建一个字段
obj.add_section('wang')
obj.add_section('zhang')
# 删除一个字段,如果这个字段存在则删除,并且返回True,删除的字段不存在返回False
obj.remove_section('wang')
# 删除一个option,如果要指定的section不存在则报configparser.NoSectionError: No section: 'xxx'的错误
# 但是section存在,删除并返回True
# 如果要删除的option不存在,则返回False,但不报错
obj.remove_option('mysql', 'user')
# 为指定的字段 mysql 添加 option, 注意,指定字段必须存在
obj.set('mysql', 'user1', '234')
# 最后,别忘了,将最新修改的结果更新到文件中
obj.write(open(file_path, 'w'))
欢迎斧正,that's all see also: