password
URL
type
status
date
slug
summary
tags
category
icon
周起始
标签
是否汉化
📌
很多时候都是自己挖了个坑,然后义无反顾的跳进去。坑是自己挖的,跳也是自己跳的,最后爬不出来的也是自己。
Python 常用配置文件处理

配置文件

1. 什么是配置文件

配置文件是为程序配置参数和初始设置的文件。一般为文本文件,以iniconfcnfcfgyaml等作为后缀名。
例如mysql的配置文件my.cnf内容如下:

2.配置文件的作用

通过配置文件可以使得代码中的参数根据配置文件进行动态配置,而不用直接修改代码的内部,减少风险提高代码复用。

经典应用场景

  1. 多个函数调用同一参数,这个时候最好进行配置化,改动配置文件就可以修改所有函数
  1. 某个参数需要能够动态改变

3.常见配置文件

3.1 ini/conf/cnf文件

这类配置文件由节(section),键(key),值(value)由一下格式组成。

3.2 yaml文件

3.2.1 简介

yaml文件本质上是一种标记语言,和普通的配置文件相比它能表示更为复杂的数据结构。
它的基本语法规则如下:
  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
# 表示行注释
yaml支持三种数据结构:
  • 对象:键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典 (dict)
  • 数组:一组有顺序的值,又称为序列/ 列表(List)
  • 标量:单个值

3.2.2 对象

对象的一组键值对使用冒号结构表示

3.2.3 数组

一组连字符开头的行,构成一个数组

3.2.4 组合结构

对象数组可以结合使用,形成组合结构

3.2.5 标量

yaml可以表示如下数据类型如下:
  • 字符串 默认字符串不要加引号,如果有特殊字符串,用引号包裹
  • 布尔值 true,false
  • 整数
  • 浮点数
  • Null - 表示null
  • 时间 iso8601 1949-10-01t09:00:00+08:00
  • 日期 1949-10-01

二:解析配置文件

1.ConfigParser模块

python提供内置库ConfigParser用来解析ini格式的配置文件。
config.ini
read_ini.py
输出
Python

2.pyyaml模块

python解析yaml文件需要安装第三方库pyyaml
pip安装pip install pyyaml
pyyaml库的使用非常简单,它会将整个yaml配置文件内容解析成一个python字典返回。
输出的是字典

3.配置文件解析模块封装

3.1 功能分析

封装前,我们先考虑一下,这个配置文件解析模块需要哪些功能?
  1. 能够处理多种配置文件
  1. 返回值数据结构一致

3.2 封装成函数

封装思路:
  1. 输入参数为配置文件名,以及配置文件字符编码
  1. 根据配置文件名获取配置文件后缀判断配置文件类型,然后分别处理
  1. ini配置文件解析后处理成字典,其实也可以不出处理,ConfigParser对象支持字典格式的取值
  1. ini配置文件解析的一个重要的问题时,不能自动识别配置类型,所以解耦不是很彻底,有时候需要在引用代码中另外处理。
  1. yaml库直接解析数据为一个字典,且自动识别数据类型,不需要做其他处理。
代码封装如下

3.3 封装成类

封装思路:
  1. 整体思路和上面的函数封装是一致的
  1. 将解析ini文件和yaml文件的逻辑分开放到两个私有方法中
  1. 因为逻辑本身比较简单,面向对象封装和函数封装没有太多区别

4.应用到项目中

一个框架封装的彻不彻底的标准是能否复用,也即是另外一个项目来用时,不需要修改框架的源码。
在我们目前封装的框架中,耦合高的点有:
  1. 日志器调用时的传参
  1. 用例数据文件的路径
  1. 生成报告时的传参
配置文件config.yaml
get_config函数解析后:
我们可以将这些写到配置文件中,然后在框架代码中动态的获取配置文件的相对应设置,实现代码的解耦。
common 文件夹下的 __init__.py的文件中调用解析配置文件的函数
 
 

🎒
离开乏味的皮囊,自由的灵魂在路上
  • Name: Alan Hsu
  • Tag: 随感、技术、经验、旅行、推荐、生活、音乐、电影 etc.
  • Email:xulanzhong521gmail.com
  • WeChat: Alan_Hsu_521
notion image
notion image
 
 
Relate Posts
deepseek-r1:7b和deepseek-r1:1.5b-qwen-distill-q4_K_M区别和释义
Lazy loaded image
CrewAI tool 调用是写在agents里还是task里
Lazy loaded image
Prompt Engeering
Lazy loaded image
Python测试开发
Lazy loaded image
基于大模型搭建本地私有化知识库的搭建与研究
Lazy loaded image
python中 self cls的区别
Lazy loaded image
Python 10个简单好用的装饰器Mac software & chrome plug-in backup
Loading...
Alan_Hsu
Alan_Hsu
许心志我在 蓝湛阔天海 中定自主宰
统计
文章数:
181
Latest posts
2025_周报 #06
2025-3-6
deepseek-r1:7b和deepseek-r1:1.5b-qwen-distill-q4_K_M区别和释义
2025-2-14
CrewAI tool 调用是写在agents里还是task里
2025-2-14
Prompt Engeering
2025-2-9
Python测试开发
2025-2-7
2025_周报 #01
2025-2-6