04-配置文件:.ini和.yaml
为了是程序中的一些必要参数在根据不同的使用场景不需要每次都去修改代码源文件,所以可以讲这些参数写在配置文件中,然后在不同的应用场景中,去修改配置文件即可,不用去修改代码源文件。
常用的配置文件中.ini
文件和.yaml
文件。
1. .ini
配置文件
1.1 .ini
配置文件的编写格式。
.ini
文件的书写需要三要素:section
,options
,values
。
每一个section
都相当于一个段落,这个段落中存放的是options=value
格式的配置信息。
每一个.ini
配置文件都可以有多个section
段落,分别代表不同的配置信息。section
是一个配置信息的段落名,所以它是单独独占一行,且需要被写在[]
中。
; 这是注释
[section0]
key0 = value0
key1 = value1
[section1]
key2 = value2
key3 = value3
.ini
配置文件中也可以有注释,注释是写在以;
开头的行中。
1.2 python
读取配置文件信息
在python
中,有一个内置的读取.ini
文件的类库,它专门用于对.ini
配置文件进行读取或是写入操作:configparser
。
from configparser import ConfigParser
parse = ConfigParser()
# 读取ini文件
s = parse.read("conf.ini", encoding="utf-8")
# 按需读取文件中的配置信息
val = parse.get("email_qq", "sender")
print(val, type(val))
读取.ini
文件操作步骤:
1. 引入configparser
库,使用其中的ConfigParser
类。
from configparser import ConfigParser
2. 实例化ConfigParser
。
parse = ConfigParser()
3. 运用实例化的对象,调用ConfigParser
类中的read
方法,将.ini
文件整体读取到电脑内存中。
parse.read("conf.ini", encoding="utf-8")
这个方法接收两个参数:一个是配置文件,可以读取一个配置文件,也可以读取多个配置文件;还有一个是编码格式,默认的编码格式是None
,但是为了防止配置文件中有中文, 所以将编码格式设置成utf-8
。
4. 按需读取,使用get()
方法,读取想要的数据。
val = parse.get("email_qq", "sender")
print(val, type(val))
该方法接收两个参数:一个是配置文件的section
名,因为需要按照不同的需求, 从不同的section
中取值;另一个就是options
名。
这样就可以配置文件中,按照section
和options
两个条件来获取需要的数据。
但是,get
方法读取出来的数据,全部是字符串类型的数据。ConfigParser
类还提供读取整型,浮点型和布尔型数据的方法。
parse.getboolean("email_qq", "is_ok")
parse.getint("email_qq", "port")
parse.getfloat("email_qq", "pwd")
但是,需要注意的是:如果想要读取出来的数据时布尔值,那么在配置文件中存放的数据要看起来像是布尔类型, 也就是存放的数据要是True/False
或是true/false
才可以。
1.3 一次性读取ini
配置文件中的信息
在python
内置的configparser
库中,没有提供一次性读取全部数据的方法,所以需要去手动实现这一功能。
实现的思路就是:先获取ini
文件中的全部sections
,然后再获取每个sections
中的全部options
,最后根据options
去取值。
from configparser import ConfigParser
parse = ConfigParser()
s = parse.read("conf.ini", encoding="utf-8")
# 获取ini文件中的全部section
section_list = parse.sections()
print(section_list)
val_list = []
for section in section_list:
# 获取每个section中全部option
option_list = parse.options(section)
for option in option_list:
val = parse.get(section, option)
val_list.append(val)
print(val_list)
2. yaml
配置文件
yaml
在python
中的比较多。
yaml
是一种简介的非标记语言,以数据为中心,使用空白、缩进、分行组织数据, 从而使得表示更加简介 容易。
yaml
的基本规则:
- 大小写敏感;
- 使用缩进表示层级关系 - ,并且可以直接转换成
python
中的数据。 - 禁止使用tab表示缩进,只能适用空格。
- 缩进长度没有限制,只要元素对齐就表示这些数据属于一个层级。
- 使用#表示注释
- 字符串可以不用引号标注。
2.1 yaml
语法规则
yaml
语法支持字典,列表,和纯量。
2.1.1 字典
yaml
语法中,使用英文冒号表示一组键值,并且使用缩进表示字典的嵌套:
info:
name: Tom
age: 18
gender: 男
上组例子,如果转换成python
中的字典,则表示为:
{
"info": {
"name": "Tom",
"age": 18,
"gender": "男"
}
}
2.1.2 列表
yaml
语法中,使用-
表示一个列表中的元素,通过缩进,表示列表中嵌套列表。
- China
- 山东
- 山西
- USA
- Japan
以上数据,在python
中的表示为:
[
"China",
["山东", "山西"],
"USA",
"Japan"
]
但是注意:在yaml
文件中进行编写的时候,要么是整体是一个字典,要么是整体是一个列表,不能出字典与列表并存的现象;但是允许字典中嵌套列表,或是列表中嵌套字典等的数据嵌套关系。
2.2 读取.yaml
文件
在python
中使用第三方库pyyaml
来读取.yaml
文件。
下载安装pyyaml
库:pip install pyyaml
。
读取文件的步骤很简单:
- 引入
pyyaml
; - 打开
yaml
文件; - 使用
load
方法读取文件数据。
import yaml
# 打开yaml文件
with open("conf.yaml", encoding="utf-8") as f:
# 使用yaml中的load方法,这个方法需要传递两个参数,一个是文件句柄,一个是yaml提供的加载器
data = yaml.load(f, yaml.FullLoader)
print(data)
注意:在引入模块的时候,引入的是yaml
,而不是pyyaml
;使用pyyaml
读取文件的时候,是一次性将文件中的全部读取完毕。