Python系列 48 内置模块:configparser

2021/7/4 14:21:29

本文主要是介绍Python系列 48 内置模块:configparser,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

configparser简介

configparser模块是Python的内置模块,提供了配置文件创建、解析、修改等功能。

官方文档

值得注意的是,在Python2中,它的命名是驼峰式的,为ConfigParser。

认识配置文件

配置文件常以.ini或者.cfg作为后缀,注释方式有2种。

#注释与;注释,一个配置项是以键值对方式进行存储,通过:或者=分割。

[regulator]
user_name : Yunya
age = 21
sex = male
is_admin = true
salary = 20

[path]
RUN_LOG_FILE = log/run.log $true
ERROR_LOG_FILE = log/error.log $true

如果某一个配置项后面加上了 t r u e , 则 true,则 true,则true在解析的时候将被替换为BASE_DIR,也就说该$true会被替换为完整的路径。

我个人喜欢将一个配置文件分成3部分,尽管下面的叫法并不是非常的正确:

  • 配置项分类(classify):以[]包裹的数据项,或者称为block
  • 配置项的键(key)::或者=左边的数据项
  • 配置项的值(value)::或者=右边的数据项

字典一样操作

configparser模块能够让配置文件像字典一样进行操作。

下面介绍3个该模块提供的基本方法:

方法描述
ConfigParser()创建文档对象
documentObject.read(filenames, encoding=None)读取配置文件
documentObject.write(fp)将文档对象写入磁盘

如下示例,对配置文件进行读取:

import configparser


# 创建文档对象,并且读取配置文件
documentObject = configparser.ConfigParser()
documentObject.read(filenames="./config.ini", encoding="u8")

# 获取所有classify
classifyAllTuple = tuple(documentObject.items())

# 获取所有的key和value
for classify in documentObject.values():
    print(dict(classify.items()))

# 获取指定classify下的指定key的value
# 需要自己做类型转换
userAge = documentObject["regulator"]["age"]
print(int(userAge))

新增一个配置文件,先创建一个空的文档对象,然后加入一些子字典,将他看做嵌套字典,最后进行写入磁盘即可:

import configparser

# 先创建一些classify以及kev-value配置项
defaultClassify = {
    "ip": "0.0.0.0",
    "port": 65535,
}

serverClassify = {
    "ip": "192.168.0.120",
    "port": 65536,
}

loginClassify = {
    "user": "root",
    "password": "123456",
    "db": 1,
    "verify": False,
}

# 创建一个空文档对象
noneDocumentObject = configparser.ConfigParser()

# 为这个空文档对象,添加classify,将它看成字典操作即可
noneDocumentObject["DEFAULT"] = defaultClassify
noneDocumentObject["SERVER"] = serverClassify
noneDocumentObject["LOGIN"] = loginClassify

# 将文档对象写入到磁盘
with open(file="./newConfig.ini", mode="wt", encoding="utf8") as f:
    noneDocumentObject.write(fp=f)

修改一个配置项,对字典中的value进行更新。最后将文档对象写入到磁盘:

import configparser

# 创建文档对象,并且读取配置文件
documentObject = configparser.ConfigParser()
documentObject.read(filenames="./config.ini", encoding="u8")

# 修改regulator下的age为30岁,注意这里必须为str类型
documentObject["regulator"]["age"] = "30"

# 写入磁盘
with open("./config.ini", mode="wt", encoding="utf8") as f:
    documentObject.write(fp=f)

读取配置文件

configparser模块此外也为文档对象提供了一些专用的方法,来操作配置文件。

如下所示:

方法描述
sections(self)拿到所有的classify
options(self, section)指定一个classify,拿到其下所有的key
items(self, section=_UNSET, raw=False, vars=None)指定一个classify,拿到其下所有的key和value
get(self, section, option)指定classify和key,拿到具体的value,并将其转换为Python中的str类型
getint(self, section, option)指定classify和key,拿到具体的value,并将其转换为Python中的int类型
getfloat(self, section, option)指定classify和key,拿到具体的value,并将其转换为Python中的float类型,保留1位小数
getboolean(self, section, option)指定classify和key,拿到具体的value,并将其转换为Python中的bool类型

示例演示:

import configparser

# 初始化文档对象,并且读取配置文件
documentObject = configparser.ConfigParser()
documentObject.read(filenames="./config.ini", encoding="utf8")

# 获取配置文件中所有的classify
allClassify = documentObject.sections()
print(allClassify)
# ['regulator', 'path']

# 获取classify(regulator)下所有的key
regulatorKeys = documentObject.options(section=allClassify[0])
print(regulatorKeys)
# ['user_name', 'age', 'sex', 'is_admin', 'salary']

# 获取classify(regulator)下所有的键值对
regulatorItems = documentObject.items(section=allClassify[0])
print(regulatorItems)
# [('user_name', 'Yunya'), ('age', '21'), ('sex', 'male'), ('is_admin', 'true'),('salary', '20')]

# 获取classify(regulator)下的key(user_name)对应的value
# get()会自动将value转换为str类型
name = documentObject.get(section=allClassify[0], option="user_name")
print(name)
# Yunya

# 获取classify(regulator)下的key(age)对应的value
# getint()会自动将value转换为int类型
age = documentObject.getint(section=allClassify[0], option="age")
print(age)
# 21

# 获取classify(regulator)下的key(is_admin)对应的value
# getboolean()会自动将value转换为bool类型
isAdimin = documentObject.getboolean(section=allClassify[0], option="is_admin")
print(isAdimin)
# True

# 获取classify(regulator)下的key(salary)对应的value
# getfloat()会自动将value转换为float类型,并保留一位小数
salary = documentObject.getfloat(section=allClassify[0], option="salary")
print(salary)
# 20.0

修改配置文件

configparser模块也提供了一些修改配置文件的方法。

如下表所示,但我很少会使用到,所以不再进行案例书写了:

方法描述
add_section(self, section)向文档对象中增加一个classify
set(self, section, option, value=None)设置或添加文档对象的键值对
remove_section(self, section)删除文档对象中的的一个classify
remove_options(self, section, option)删除文档对象中的一组键值对
has_section(self, section)判断文档对象中的一个classify是否存在
has_options(self, section, option)判断文档对象中的一个key是否存在

个人更加倾向于通过字典的方式操纵文档对象。

特殊的DEFAULT

配置文件中有1个名为DEFAULT的classify,它提供了一些默认设置。

如果你的配置文件中没有显式的配置DEFAULT这个classify,则通过字典操作任然会获取到到它。但是若通过方法进行操作,该classify则不会出现。



这篇关于Python系列 48 内置模块:configparser的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程