两种类型的配置文件,.ini,yaml(其中,conf,cfg类型文件和ini一样操作)
一、ini配置文件
1、创建一个.ini的配置文件,格式如下,可配置多个区域
"""
不用空格,不用双引号
[section] #区域
option=value
option=value
[section]
option=value
option=value
"""
创建文件如下:
2、读取ini文件的数据
"""2.1 引入ConfigParse类"""
from configparser import ConfigParser
"""2.2实例化ConfigParse类"""
conf = ConfigParser()
"""2.3读取配置文件"""(参数一:文件地址)
conf.read("nmbpy35.ini",encoding="utf-8")
"""2.4 读取某一项配置:get(section,option),默认读出来的值全部是字符串"""
value = conf.get("log","name")
print(value)
"""支持读取出来的数据是bool,int,float"""
conf.getboolean()
conf.getint()
conf.getfloat()
"""获取文件所有的section"""
conf.sections()
3 往文件里写入数据(用不到,了解即可)
4、把读取ini文件方法封装起来,其他模块就可以直接引入对象直接调用
from configparser import ConfigParser
#继承ConfigParser类,拥有它所有的方法,只是在初始化、读取文件做一些优化
class MyConfig(ConfigParser):
def __init__(self, file_path):
#为了保证能够引用父类的init,且在父类的基础上做优化,就用到super
super().__init__()
self.read(file_path, encoding="utf-8")
import os
#路径做成动态变化,让其他文件引用
file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)),"nmbpy35.ini")
#文件做成全局配置的性质,用一个文件,编写多个模块,想用什么调什么
#所以直接用一个文件实例化对象、哪里用到直接conf对象调用
conf = MyConfig(file_path)
if __name__ == '__main__':
print(conf.get("log","name"))
二、yaml文件
yaml是一种简洁的非标记语言
以数据为中心,使用空白,缩进,分行组织数据,从而使得表达更加简洁
基本规则:
1、大小写敏感
2、使用缩进表示层级关系
3、禁止使用tab缩进,只能使用空格键
4、缩进长度没有限制,只要元素对齐就表示这些元素属于一个层级
5、使用#表示注释
6、字符串可以不用引号标注
编写规范:
1、字典
使用(:)表示键值对,同一缩进的所有键值对属于一个map(注意冒号后面的空格)
2、列表
使用连字符(-)表示,注意-后的空格
3、scalar,纯量
字符串、数字、布尔值。不可变数据类型
现在编写两个yaml文件读取数据:
(字典列表可以相互嵌套)
"""
读取yaml文件有三步
1、导入yaml,import yaml
2、打开yaml文件:open函数
with open(yaml文件路径,encoding="utf-8") as fs:
3、调用yaml.load加载文件对象,为python对象
data = yaml.load(fs, yaml.FullLoader)
"""
import yaml
with open("nmbcyy.yaml", encoding="utf-8") as fs:
data = yaml.load(fs, yaml.FullLoader)
for k, v in data.items():
print("键", k)
print("值", v)
print("*"*90)
with open("cyy_ml.yaml", encoding="utf-8") as fs:
data = yaml.load(fs, yaml.FullLoader)
print(data)
输出到Console显示如下