iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 操作配置文件。
  • 639
分享到

python 操作配置文件。

数据库服务器开发语言压力测试测试用例 2023-09-22 18:09:51 639人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

  一:配置文件 1. 什么是配置文件 配置文件是为程序配置参数和初始设置的文件。一般为文本文件,以ini,conf,cnf,cfg,yaml等作为后缀名。 例如Mysql的配置文件my.cnf内容如下: [mysqld]# Only a

 

一:配置文件

1. 什么是配置文件

配置文件是为程序配置参数和初始设置的文件。一般为文本文件,以ini,conf,cnf,cfg,yaml等作为后缀名。

例如Mysql的配置文件my.cnf内容如下:

[mysqld]# Only allow connections from localhostbind-address = 0.0.0.0mysqlx-bind-address = 127.0.0.1default_authentication_plugin = mysql_native_passWord

2.配置文件的作用

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

经典应用场景

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

3.常见配置文件

ini/conf/cnf文件

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

[section1]key1=value1key2=value2[section2]key1=value1

2 yaml文件

2.1 简介

yaml文件本质上是一种标记语言,和普通的配置文件相比它能表示更为复杂的数据结构

它的基本语法规则如下:

  • 大小写敏感
  • 使用缩进表示层级关系
  • 缩进时不允许使用Tab键,只允许使用空格。
  • 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可

# 表示行注释

yaml支持三种数据结构:

  • 对象: 键值对的集合,又称为映射(mapping)/ 哈希(hashes) / 字典 (dict)
  • 数组: 一组有顺序的值,又称为序列/ 列表(List)
  • 标量:单个值

2.2 对象

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

name: xinlanperson: {name: xinlan, age: 18}

2.3 数组

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

- title- username- passwordargs: [title, username, password]

2.4 组合结构

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

name: xinlanage: 18hobby: [python, 游戏, sport]ouxiang:   -     name: 刘德华    age: 60  -     name: 任达华    age: 65

2.5 标量

yaml可以表示如下数据类型如下:

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

二:解析配置文件

1.ConfigParser模块

Python提供内置库ConfigParser用来解析ini格式的配置文件。

[log]filename=py45.logdebug=false[mysql]host=127.0.0.1database=lemonuser=rootpassword=123456port=3306
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/15 21:31# @Author  : shisuiyi# @File    : read_ini.py# @Software: win10 Tensorflow1.13.1 python3.9from configparser import ConfigParser config = ConfigParser()  # 实例化config.read('config.ini')  # 读取配置文件print(config.sections())  # 返回所有的section名称字符串,一列表返回print(config.options('mysql'))  # 返回指定section下对应的配置项的所有的字符串名称,以列表返回print(config.items('log'))  # 返回指定section下所有的配置项的键值对,二元元组print(config.get('mysql', 'port'))print(config.getint('mysql', 'port'))  # 指定类型,帮我们转换类型print(config["mysql"]['host'])  # 直接以字典取值的方式读取ini文件

输出

C:\Users\12446\AppData\Local\Programs\Python\Python39\python.exe D:/Lemon/py45/day19/read_ini.py['log', 'mysql']['host', 'database', 'user', 'password', 'port'][('filename', 'py45.log'), ('debug', 'false')]33063306127.0.0.1 Process finished with exit code 0

2.pyyaml模块

python解析yaml文件需要安装第三方库pyyaml

pip安装pip install pyyaml

pyyaml库的使用非常简单,它会将整个yaml配置文件内容解析成一个python字典返回。

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/16 20:22# @Author  : shisuiyi# @File    : read_yaml.py# @Software: win10 Tensorflow1.13.1 python3.9import yaml with open('config.yaml', 'r', encoding='utf-8') as f:    config = yaml.load(f, Loader=yaml.FullLoader)    print(config)

输出的是字典

{'log': {'filename': 'py45.log', 'debug': False}, 'mysql': {'host': '127.0.0.1',  'database': 'lemon',  'user': 'root',  'password': '123456',  'port': 3306}}

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

1 功能分析

封装前,我们先考虑一下,这个配置文件解析模块需要哪些功能?

  1. 能够处理多种配置文件
  2. 返回值数据结构一致

2 封装成函数

封装思路:

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

代码封装如下

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/16 20:33# @Author  : shisuiyi# @File    : congig_handler.py# @Software: win10 Tensorflow1.13.1 python3.9from configparser import ConfigParserimport yaml  def get_config(filename, encoding='utf-8'):    """    获取yaml/ini配置文件中的配置    @param filename: str 文件名    @param encoding: 文件字符编码    """    # 1. 获取配置文件后缀    suffix = filename.split('.')[-1]    # 2.判断类型    # 3.分别处理    if suffix in ['yaml', 'yml']:        with open(filename, 'r', encoding=encoding) as f:            data = yaml.load(f, Loader=yaml.FullLoader)     else:        conf = ConfigParser()        conf.read(filename)        data = {}        for section in conf.sections():            data[section] = dict(conf.items(section))    # 4. 返回    return data  if __name__ == '__main__':    res = get_config(r'D:\Lemon\py45\day18\config.yaml')    print(res)

3 封装成类

封装思路:

  1. 整体思路和上面的函数封装是一致的
  2. 将解析ini文件和yaml文件的逻辑分开放到两个私有方法中
  3. 因为逻辑本身比较简单,面向对象封装和函数封装没有太多区别
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/16 20:33# @Author  : shisuiyi# @File    : congig_handler.py# @Software: win10 Tensorflow1.13.1 python3.9from configparser import ConfigParserimport yaml  class Config:    def __init__(self, filename, encoding='utf-8'):        self.filename = filename        self.encoding = encoding        self.suffix = self.filename.split('.')[-1]        if self.suffix not in ['yaml', 'yml', 'cnf', 'conf', 'ini']:            raise ValueError('不能识别的配置文件后缀:{}'.fORMat(self.suffix))     def parse_ini(self):        """        解析ini        :return:        """        conf = ConfigParser()        conf.read(self.filename)        data = {}        for section in conf.sections():            data[section] = dict(conf.items(section))        return data     def parse_yaml(self):        """        解析yaml        :return:        """        with open(self.filename, 'r', encoding=self.encoding) as f:            data = yaml.load(f, Loader=yaml.FullLoader)        return data     def parse(self):        """        解析配置文件        :return:        """        if self.suffix in ['yaml', 'yml']:            return self.parse_yaml()        else:            return self.parse_ini()  if __name__ == '__main__':    cm = Config(r'D:\Lemon\py45\day20\config.yaml')    res = cm.parse()    print(res)

4.应用到项目

一个框架封装的彻不彻底的标准是能否复用,也即是另外一个项目来用时,不需要修改框架的源码

在我们目前封装的框架中,耦合高的点有:

  1. 日志器调用时的传参
  2. 用例数据文件的路径
  3. 生成报告时的传参

配置文件config.yaml

log:  name: py45  filename: 'D:\Lemon\py45\day18\logs\my.log'  debug: truetest_cases_dir: 'D:\Lemon\py45\day18\testcases'test_data_file: 'D:\Lemon\py45\day18\testdata\testdata.xlsx'test_report:  report_dir: 'D:\Lemon\py45\day18\reports'  title: 'py45期第一份测试报告'  desc: '木森老师的测试报告模板'  tester: 'shisuiyi'

get_config函数解析后:

{'log': {'name': 'py45',  'filename': 'D:\\Lemon\\py45\\day18\\logs\\my.log',  'debug': True}, 'test_cases_dir': 'D:\\Lemon\\py45\\day18\\testcases', 'test_data_file': 'D:\\Lemon\\py45\\day18\\testdata\\testdata.xlsx', 'test_report': {'report_dir': 'D:\\Lemon\\py45\\day18\\reports',  'title': 'py45期第一份测试报告',  'desc': '木森老师的测试报告模板',  'tester': 'shisuiyi'}}

我们可以将这些写到配置文件中,然后在框架代码中动态的获取配置文件的相对应设置,实现代码的解耦。

common 文件夹下的 __init__.py的文件中调用解析配置文件的函数

#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/13 10:16# @Author  : shisuiyi# @File    : __init__.py.py# @Software: win10 Tensorflow1.13.1 python3.9from common.log_handler import get_loggerfrom common.read_excel_tool import get_data_from_excelfrom common.congig_handler import get_config  conf = get_config(r'D:\Lemon\py45\day19\config.yaml')  # 在这里将配置文件解析成字典格式返回logger = get_logger(**conf['log'])  # 在这里创建日志器----日志器调用时的传参
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/8 21:08# @Author  : shisuiyi# @File    : test_login.py# @Software: win10 Tensorflow1.13.1 python3.9  cases = get_data_from_excel(conf['test_data_file'], 'login') # ---测试用例数据的路径
#!/usr/bin/env python# -*- coding: utf-8 -*-# @Time    : 2021/11/9 20:14# @Author  : shisuiyi# @File    : main.py# @Software: win10 Tensorflow1.13.1 python3.9import unittestimport unittestreportfrom common import conf  if __name__ == '__main__':    discover = unittest.defaultTestLoader.discover(conf['test_cases_dir'])  # 表示收集当前目录下所有用例    runner = unittestreport.TestRunner(discover, **conf['test_report'])    runner.run()

总结

以上就是今天为各位小伙伴准备的内容,如果你想了解更多关于Python自动化测试的知识和技巧,欢迎关注!

感谢每一个认真阅读我文章的人,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 资料获取方式:

来源地址:https://blog.csdn.net/qq_56271699/article/details/131289123

--结束END--

本文标题: python 操作配置文件。

本文链接: https://www.lsjlt.com/news/415635.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python 操作配置文件。
      一:配置文件 1. 什么是配置文件 配置文件是为程序配置参数和初始设置的文件。一般为文本文件,以ini,conf,cnf,cfg,yaml等作为后缀名。 例如mysql的配置文件my.cnf内容如下: [mysqld]# Only a...
    99+
    2023-09-22
    数据库 服务器 开发语言 压力测试 测试用例
  • python操作cfg配置文件
     *.cfg文件一般是程序运行的配置文件,python为读写常见配置文件提供了一个ConfigParser模块,所以在python中解析配置文件相当简单,下面就举例说明一下具体的操作方法。   写文件代码: # -* - co...
    99+
    2023-01-31
    配置文件 操作 python
  • Python读取配置文件的实战操作
    目录一、 yaml1、 准备2、 操作数据2.1 读取数据二、 ini1、准备2、 操作数据2.1 读取数据2.2. 写数据三、 xml1、 准备2、 操作数据2.1 读取数据2.2...
    99+
    2023-05-14
    python读取配置文件 python如何读取配置文件 python 配置文件读取
  • Java 操作Properties配置文件详解
    1 简介:JDK提供的java.util.Properties类继承自Hashtable类并且实现了Map接口,是使用一种键值对的形式来保存属性集,其中键和值都是字符串类型。java.util.Properties类提供了getProper...
    99+
    2023-05-31
    java properties
  • Python内置十大文件操作
    日常对于批量处理文件的需求非常多,经常需要用Python写脚本调用外部文件!本次整理Python中最常用的十大文件操作方法,直接拿来用就行啦!1、创建和打开文件想要操作文件需要先创建或代开指定文件并创建文件对象,用open()方法实现,其语...
    99+
    2023-05-14
    Python 文件操作
  • 如何实现Python中ini配置文件读写操作
    这篇文章将为大家详细讲解有关如何实现Python中ini配置文件读写操作,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。导入模块import configparser # py...
    99+
    2023-06-29
  • python 文件操作
    python基本的文件操作,包括 open,read,write对文件操作流程:1.打开文件,得到文件句柄并赋值给一个变量2.通过句柄对文件进行操作3.关闭文件 新建一个txt文件,内容是《Yesterday When I Was...
    99+
    2023-01-30
    操作 文件 python
  • python文件操作
    1. 文件操作 open 打开 f = open(文件路径, mode="模式", encoding="编码格式") 最最底层操作的就是bytes 打开一个文件的时候获取到的是一个文件句柄. ...
    99+
    2023-01-30
    操作 文件 python
  • 【Python】文件操作
    一、文件的编码 思考:计算机只能识别:0和1,那么我们丰富的文本文件是如何被计算机识别,并存储在硬盘中呢 答案:使用编码技术( 密码本)将内容翻译成0和1存入 编码技术即:翻译的规则,记录了如何将内容翻译成二进制,以及如何将二进制翻译回...
    99+
    2023-10-21
    python
  • python-文件操作
    文件操作 1.  读 / 写 操作 读取: r (read):只能读不能写,文件不存在就报错 ​#打开文件:    object = open('某txt文件',mode = 'r',encoding = '编码')​#读取文件所有内...
    99+
    2023-01-31
    操作 文件 python
  • python---文件操作
    一、对文件操作流程1.打开文件,得到文件句柄并赋值给一个变量2.通过文件句柄对文件进行操作3.关闭文件二、文件打开模式f = open("file_test","r",encoding = "utf-8")    #打开文件,“读模式”,只...
    99+
    2023-01-31
    操作 文件 python
  • Python--文件操作
    文件处理流程 1.打开文件,得到文件句柄并赋值给一个变量 2.通过句柄对文件进行操作 3.关闭文件  r模式,默认模式,文件不存在则报错 w模式,文件不存在则创建,文件存在则覆盖 a模式,文件不存在则创建,文件存在则不会覆盖,写内容会以...
    99+
    2023-01-30
    操作 文件 Python
  • python 操作文件
     python中对文件、文件夹(文件操作函数)的操作需要涉及到os模块和shutil模块。 操作前需要 import os; 返回当前目录,不包括文件名: os.getcwd(); 返回指定目录下的所有文件和目录名:os.listdir("...
    99+
    2023-01-31
    操作 文件 python
  • Python内置文件操作有哪些
    这篇文章主要讲解了“Python内置文件操作有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python内置文件操作有哪些”吧!1、创建和打开文件想要操作文件需要先创建或代开指定文件并创...
    99+
    2023-07-06
  • C#操作配置文件app.config、web.config增删改
    一、概述 应用程序配置文件,对于asp.net是 web.config,对于WINFORM程序是 App.Config(ExeName.exe.config)。 配置文件,对于程序本...
    99+
    2024-04-02
  • myfaces 在程序中配置文件的操作
    使用myfaces的实现类org.apache.myfaces.config.RuntimeConfig 对象可以获取当前的配置文件的信息。操作RuntimeConfig.getCurrentInstance(FactsUtils.getF...
    99+
    2023-06-03
  • 如何进行.net Framework配置文件操作
    这期内容当中小编将会给大家带来有关如何进行.net Framework配置文件操作,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。.NET Framework的应用可以帮助开发人员创建一个支持WEB应用程序...
    99+
    2023-06-17
  • SpringBoot读写操作yml配置文件方法
    目录yml配置规则普通的kv读取读取到集合和数组读取为对象和Mapyml配置规则 属性跟属性值之间使用“:”和一个“空格”隔开,层级结...
    99+
    2023-01-28
    SpringBoot读写操作yml SpringBoot yml配置文件
  • Python文件IO操作
    文件IO常用操作:open打开read读取write写入close关闭readline行读取readlines多行读取seek文件指针操作tell指针位置打开操作:open(file, mode='r', buffering=-1, enc...
    99+
    2023-01-31
    操作 文件 Python
  • python操作Xml文件
    一、简单介绍Xml是实现不同语言或程序进行数据交换的协议,跟json差不多,但是xml远远先于json出现,例如在很多传统的金融行业的很多系统接口还主要是xml格式。Xml的格式如下:<Settings modified="2016-...
    99+
    2023-01-31
    操作 文件 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作