一般配置文件种类:ini,conf,yaml
- ini与conf
- 注释使用;或者#
组成:
[section] 区域名
option = value 选项 = 选项值
读取:
1️⃣创建配置解析器对象
config = ConfigParser()
2️⃣指定读取的配置文件名
config.read('filename', encoding='utf-8')
3️⃣读取数据
config.sections()
获取配置文件的option
方法一:
config[section][option]
方法二:
config.get(section,option)
取值转换为python对应的类型:
getint()
getfloat()
getboolean() -->
对应转换关系:
**配置文件中存在一个默认为DEFAULT的section区域,该区域中的option为所有section中公共的数据(类似全局变量),若不显式定义DEFAULT,则默认为一个空字典**
写入
1️⃣创建配置解析器对象
config = ConfigParser()
2️⃣将需要写入的配置文件构造成嵌套字典的字典(section为key,option及value为key,value)
for key in dict_dict:
config[key] = dict_dict[key]
with open('filename', 'w') as f:
config.write(f)
封装
- 类名() --> 自动调用init()方法,创建一个实例化对象
- 对象() --> 自动调用call()方法,
class HandleConfig(ConfigParser):
def __init__(self, filename=File_path.Config_File_Path):
# 继承父类,同时重写父类self.filename属性,对父类init方法的拓展
super().__init__()
self.filename = filename
self.read(self.filename, encoding="utf-8")
def __call__(self, section="DEFAULT", option=None, is_eval=False, is_bool=False):
"""
'对象()'这种形式,__call__方法会被调用
:param section: 区域名
:param option: 选项名
:param is_eval: 为默认参数,是否进行eval函数转换,默认不转换
:param is_bool: 选项所对应的值是否需要转化为bool类型,默认不转换
:return:
"""
if option is None:
# 返回DEFAULT默认区域下的所有选项,构造成的一个字典
return dict(self[section])
if isinstance(is_bool, bool):
if is_bool:
# 将获取到的数据使用getboolean()方法来获取
return self.getboolean(section, option)
else:
raise ValueError("is_bool必须是布尔类型") # 手动抛异常
data = self.get(section, option)
# 如果获取到的数据为数字类型的字符型,自动转化为Python中数字类型
if data.isdigit(): # 判断是否为数字类型的字符串
return int(data)
try:
return float(data) # 如果为浮点类型的字符串,则直接转换
except ValueError:
pass
if isinstance(is_eval, bool):
if is_eval:
# 将获取到的数据使用eval函数进行转换
return eval(data)
else:
raise ValueError("is_eval") # 手动抛异常
return data
yaml相关
存储字典使用[key: value]的形式,(冒号后面需空一格)存储列表使用[- 元素]的形式,存储书写注意缩进
- 写
yaml文件写入一组数据直接使用dump方法,写入多组数据使用dumpall方法,注意写入数据带中文,需要指定参数allowunicode=True
with open('filename.yaml', mode='w', encoding='utf-8') as f:
yaml.dump(data=test_data, stream=f, allow_unicode=True)
- 读
读取数据时需要使用load_all方法,而且此方法返回一个生成器,需要使用for循环迭代读取每一组数据
with open('filename.yaml', mode='r', encoding='utf-8') as file:
t = yaml.load_all(file, Loader=yaml.FullLoader)
for data in t:
print(t)
yaml参考资料:
- https://sutune.me/2018/05/08/appium-yaml/
- https://www.cnblogs.com/linuxchao/p/linuxchao-yaml.html#4335168