软编码:参数化整个项目配置
硬编码:写死的编码方式
一、配置文件分类
1、xxx.ini:django项目部署uwsgi,了解
2、xxx.yaml:java用的多,dockercompose,了解
3、xxx.py:python文件,settings.py
4、使用场景:生产环境、测试环境:ip不一样、数据库地址、密码、账号
二、xxx.ini 文件
1、写法
[section]
key1=val1
key2=val2
key3=val3
test_dict={"key1":"val1","key2":"val2","key3":"val3"}
print(test_dict["key1"])
test_conf={"testpy1":{"key1":"val1","key2":"val2","key3":"val3"},
"testpy2":{"key1":"val1","key2":"val2","key3":"val3"}
}
2、特点
1、section不能重复
2、同一个section中的key不能重复
3、等号两边不能有空格
4、获取值默认是字符串类型
5、添加、删除、修改只是对缓存区域的改变,不会真实修改文件
3、常用方法
3.1、获取所有的sections
sections = conf.sections()
test_sections_2 = conf.keys()
3.2、获取指定sections下所有的options
test_options = conf.options(section='testpy1') # 获取key
test_options=conf.items(section='testpy1') # 获取key,value
3.3、直接获取key(options)的value
1、默认获取到的是str【常用】
value = conf.get(section='testpy1', option='host')
2、 获取布尔值【了解】
value2=conf.getboolean(section='testpy1', option='key2')
3、获取数值(int类型),不能使用小数,只能写整数【了解】
value3 = conf.getint(section='testpy1', option='key2')
4、获取数值(float类型)【了解】
value4 = conf.getfloat(section='testpy1', option='key3')
4、其他操作
1、添加 sections(操作内存)
conf.add_section('your_section')
2、添加 key,val(操作内存)
conf.set('your_section','key22','val22')
3、删除(操作内存)
conf.remove_option('your_section', "key1")
4、写入文件
将你内存你的数据全部写入文件进行覆盖,conf 初始化的时候读取的是所有对象
conf.write(fp=open(file=file_path,mode='w'))
![]()
from configparser import ConfigParser
conf = ConfigParser()
conf.read(filenames='testpy42.ini', encoding='utf-8')
conf.set('testpy1', 'k8s', 'val22')
new_value = conf.get(section='testpy1', option='k8s')
print(new_value)
class HandleIni:
def __init__(self):
self.conf = ConfigParser()
self.conf.read(filenames='testpy42.ini', encoding='utf-8')
def get_value(self, section, option):
value = self.conf.get(section=section, option=option)
return value
if __name__ == '__main__':
cl = HandleIni()
value = cl.get_value(section='testpy1', option='host')
print(value)
View Code
一、xxx.yaml文件
1、怎么写yaml文件
2、数据类型支持
{key1:val1,key2:[test01, test02, test03]}
3、特点
1、使用缩进来表示层级关系
2、大小写敏感
3、同一个层级的要对齐
4、只能用空格,不要用tab
5、一个yaml对外只支持一种数据类型
6、yanl文件是一次性读取,不支持连续读取
7、读取出来就是python对象,可以直接取值使用
二、安装yaml
pip install pyyaml
![]()
import yaml
import os
file_path = os.path.join(os.path.dirname(__file__),'textyaml.yaml')
file = open(file=file_path,encoding="utf-8")
# 安全测试有关系
value = yaml.load(stream=file,Loader=yaml.FullLoader)
print(value["key2"])
file.close()
View Code
![]()
import yaml
import os
def handle_yaml(file_path):
with open(file=file_path, encoding='utf-8') as file:
value = yaml.load(stream=file, Loader=yaml.FullLoader)
print(value)
return value
View Code