学习python自动化——配置文件(ini、yaml)

一、配置文件

  1.1、概念:公共的,常修改的文件
  1.2、类型

    1)ini
    2)yaml
    3)python文件:django配置用的就是python文件
  1.3、作用:实现软编码,方便修改
二、使用场景
  2.1、项目环境切换
    测试环境、开发环境、生产环境,这几个环境区别在于域名、端口不同,
    则可将存储端口、域名放到配置文件中
  2.2、数据库切换
    将host、passwd、db放到配置文件中    
三、ini文件使用
  3.1、安装

pip install configparser

  3.2、导入

from configparser import ConfigParser

  3.3、创建文件:创建ini后缀格式文件
  3.4、ini文件格式

[section1]                    #{section1:{key1:val1,key2:val2},section2:{key3:val3,key4:val4}}
key1=val1
key2=val2
[section2]
key3=val3
key4=val4
[mysql]
host=127.1.1.1
port=3306
bool=True
[log]
name=py39
level=DEBUG

    书写注意点:
      1)等号左右两边不能有空格
      2)section不能重复
      3)读取数据默认是字符串类型

  3.5、读取ini文件

conf=ConfigParser()
conf.read(filenames='test_ini.ini',encoding='utf-8')

  3.6、获取所有的section,获取的list类型,里面的section值是字符串类型

sect=conf.sections()
print(sect)        #打印出['mysql', 'log']

  3.7、获取所有的section,section值是字符串类型

sect_02=conf.keys()
print('这里获取的是对象',sect_02)    #直接获取的是section对象,需要遍历
for i in sect_02:
print(i)       #打印出mysql,log

  3.8、获取对应sections下所有的key,获取的list类型

keys=conf.options('mysql')
print(keys)        #打印出mysql下的所有key值,['host', 'port', 'bool']

  3.9、获取对应sections下key和value,获取的list类型

val=conf.items('mysql')
print(val)        #打印出[('host', '127.1.1.1'), ('port', '3306'), ('bool', 'True')]

  3.10、获取对应的key的值(value),默认获取的是str类型

target_val=conf.get(section='mysql',option='host')
print(target_val)        #打印出mysql下host的值,127.1.1.1

  3.11、获取int类型的key的值,返回int类型

port_val=conf.getint(section='mysql',option='port')
print(port_val)        #打印出3306

  3.12、获取bool类型的key的值,返回bool类型

bool_val=conf.getboolean(section='mysql',option='bool')
print(bool_val)        #打印出True

  3.13、获取float类型的key的值,返回float类型

float_val=conf.getfloat(section='mysql',option='port')
print(float_val)        #打印出3306.0

四、ini封装
  1)方法一:函数方法

from configparser import ConfigParser
class HandleIni:
def __init__(self,filenames):
self.conf=ConfigParser() #实例化
self.conf.read(filenames=filenames, encoding='utf-8') #读取文件

def get_str_val(self,section,option):
str_val = self.conf.get(section=section, option=option) #获取sections下对应key的值,默认返回str类型
return str_val

def get_int_val(self,section,option):
int_val = self.conf.getint(section=section, option=option) #获取sections下对应key的值,默认返回int类型
return int_val

def get_bool_val(self,section,option):
bool_val = self.conf.getboolean(section=section, option=option) #获取sections下对应key的值,默认返回bool类型
return bool_val

def get_folat_val(self,section,option):
float_val = self.conf.getfloat(section=section, option=option) #获取sections下对应key的值,默认返回float类型
return float_val

if __name__ == '__main__':
cl=HandleIni(filenames='test_ini.ini')
print(cl.get_int_val(section='mysql',option='port'))

  2)方法二:继承

from configparser import ConfigParser
class HandleIni(ConfigParser):
def __init__(self,filenames):
#继承父类的初始化方法,因为父类没有初始化方法,所以去父类的父类找初始化方法
super().__init__() #继承父类方法,父类方法中没有初始化方法时,就找父类的父类的初始化方法,继承后就可以用父类的父类的方法了
self.read(filenames=filenames, encoding='utf-8')

conf=HandleIni(filenames='test_ini.ini')
val=conf.getint(section='mysql', option='port')
print(val)

五、yaml文件使用
  5.1、安装

pip install pyyaml

  5.2、导入

import yaml

  5.3、创建文件:创建yaml后缀格式文件
  5.4、yaml文件格式
    5.4.1、dict格式:通过英文冒号(:)作为连接符,加上空格,后面写value

mysql:              #{'mysql':{'host':'127.0.0.1','port':'3306','db':'atuo_test','bool':'True'},'name':'py39'}
host: 127.0.0.1
port: 3306
db: atuo_test
bool: True
name: py39

    5.4.2、list格式:通过横杠(-)作为连接符,加上空格,后面写元素

log:                #{'log':['py39','DEBUG']}
- py39
- DEBUG

    5.4.3、特点
      1)使用空格,不用缩进符号
      2)大小写敏感
      3)一次性读取所有数据
      4)读出来就是python对象,可以直接使用
      5)注释:#
      6)一个yaml文件对外只能有一种类型(最外层dict格式和list格式不能混着用)
  5.5、读取yaml文件
    1)打开文件

file=open(file='test_yaml.yaml',encoding='utf-8')

    2)读取数据

val=yaml.load(stream=file,Loader=yaml.FullLoader)    #用yaml的load方法,获取yaml文件的所有内容
#stream:文件流,放文件 Loader:模式,FullLoader:全部加载完

    3)关闭文件

file.close()        #也可以打开文件时用with open,就不需要关闭文件了

六、yaml封装

import yaml
import pprint

def handle_yaml(): #函数封装
with open(file='test_yaml.yaml',encoding='utf-8') as file: #打开文件
val = yaml.load(stream=file, Loader=yaml.FullLoader) #获取数据
pprint.pprint(val)
return val

handle_yaml()
posted @ 2022-06-23 22:36  芒果93  阅读(829)  评论(0编辑  收藏  举报