学习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()