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: |
posted @ 2019-10-10 17:21  听雨危楼  阅读(245)  评论(0编辑  收藏  举报