在Python的configparser模块中,ConfigParser()和RawConfigParser()是两个不同的类,用于解析配置文件。它们之间的主要区别在于对配置文件中的值进行处理的方式。
一、区别
1、ConfigParser()类是configparser模块的旧版本,它提供了一些额外的特性,如对配置文件中的值进行插值替换。
当使用ConfigParser()类解析配置文件时,它会自动进行值的替换。例如,如果配置文件中的一个值是${section:key},它会自动查找相应的section和key,并将其值替换到${section:key}的位置。
ConfigParser()类还提供了一些方法来获取和设置配置文件中的值,如get()、set()等。
2、RawConfigParser()类是configparser模块的新版本,它不进行任何值的替换或插值操作。
当使用RawConfigParser()类解析配置文件时,它会将配置文件中的值原样返回,不进行任何处理。
RawConfigParser()类也提供了类似的方法来获取和设置配置文件中的值,如get()、set()等。
PS:在Python3中,ConfigParser()类实际上是对RawConfigParser()类的别名,它们是同一个类。这是为了向后兼容性而保留的。因此,在新的代码中,建议使用RawConfigParser()类来解析配置文件,以避免混淆。
SafeConfigParser()是Python2的,不适用于Python3
二、注意事项
注意,如果键值内容包含%,用ConfigParser()会有问题,解决办法:
1、键值内容将%改为%%
2、改用RawConfigParser()。另外,假设键值="abc%def" ,RawConfigParser()读取字符串时,会把双引号也当成字符串组成部分
三、示例
主要用到这3个函数来获取相应的键值:getint()、getfloat()、getboolean(),查询项目不存在时会报错,可以使用fallback参数来设置默认值
下面的2个写法的结果是一样的:
import os
# 获取当前脚本的目录路径
current_directory = os.path.dirname(os.path.abspath(__file__))
# 将工作目录更改为当前脚本所在的目录
os.chdir(current_directory)
import configparser
# 创建一个ConfigParser对象
config = configparser.ConfigParser()
# 读取INI文件
config.read('main.ini', encoding='utf-8')
aa = config.get('app', 'token_string11',fallback=None)
bb = config.get('app', 'pushplus_token')
cc = config.getint('app', 'num')
print(type(aa),aa)
print(type(bb),bb)
print(type(cc),cc)
print('\n')
# 创建一个RawConfigParser对象
configRaw = configparser.RawConfigParser()
configRaw.read('main.ini', encoding='utf')
aa = configRaw.get('app', 'token_string11',fallback=None)
bb = configRaw.get('app', 'pushplus_token')
cc = configRaw.getint('app', 'num')
print(type(aa),aa)
print(type(bb),bb)
print(type(cc),cc)
标签:配置文件,get,Python,RawConfigParser,print,configparser,ConfigParser
From: https://blog.csdn.net/qq_42771102/article/details/142359574