[python]读取.ini配置文件

853 阅读3分钟

总结

sections
option, 其中option包括key 分隔符 value

ini配置文件格式

图片.png

ini配置文件的组成

<1>section:表示一个区块,由方括号及方括号中的名称组成,
    section的范围是当前方括号到下一个方括号之间的内容,
    如“DEFAULT”,“select”,“connect_mysql”,这几个都是section
    section的名称可以随便写,只要和你的项目有关系即可。
         
<2>大小写和空格检查:
    section中的名称在保存和获取的时候是原样保存和获取的,
    即大小写不一样或者空格不一样等都是不同的section;  
    也就是说,ini文件,对大小写是敏感的.

<3>重复性检查:
    同一个配置文件中section名称不允许重复。
    肯定不能重复啊,废话。如果section重复,那么你读取配置文件的时候,鬼才知道是哪一个section。

<4>option:
    表示section中的配置项,由key、分隔符和value组成的键值对,
    如“select”下的“broswer = Chrome”。

<5>大小写检查:
    key是大小写不敏感的,保存进文件的时候会自动将key小写保存,但value是大小写敏感的;

<6>空格检查:
   通过key获取value时,会自动将文件中的key和value前后空格去掉再进行匹配,
   即文件中保存为'  broswer = Chrome '时,用'broswer'也可以获取到对应的value值'Chrome';

<7>跨多行检查: 
    key是不能跨行的,但是value可以跨行,
    只要第二行及之后行的缩进与第一行不同即可,一直到下一个option为止;

<8>重复性检查:和section一样,同一section下的key是不允许重复的;

<9>分隔符:可以是等号“=”或者冒号“:”,可以是=,也可以是冒号:

<10>注释:.ini文件的注释,可以用#符号(这一点和python一样),或者是;符号
         这里需要注意的是,注释必须是在单独的一行,不能在key = value 的后面。
       
<11>DEFAULT
     这是一个特殊的section,会用作其他section的option取不到值时的备用值,
     或者可以理解为它是一个root,其他的section都是它的子section,但不是必须提供的。

python读取.ini配置文件的实例

# 导入必要的库包

import configparser  # 导入内置的模块, 从字面上理解, 就是配置文件解析

# 通过configparser库包中的ConfigParser()类,实例化一个对象config对象
config = configparser.ConfigParser()

# 读取配置文件
# 如果配置文件中有中文汉字,不管是在注释中,还是在section中,还是在kv中,都需要加上encoding参数
# 注意配置文件的存储位置
config.read("./config.ini", encoding="utf-8")

# 读取配置文件
# 使用get()函数, 有2个参数
user = config.get("mysql", "user")
password = config.get("mysql", "password")
host = config.get("mysql", "host")
port = config.get("mysql", "port")
db_name = config.get("mysql", "company_db_name")

# 获取配置文件中所有的section
sections = config.sections()

# 获取某个值
# 第一个参数是section的名称,第二个参数是key的名字
value = config.get("section_name", "key_name")

# 指定value的类型
# 因为我们都知道,port端口是整数,所以用getint()函数获取。
port = config.getint("connect_mysql","port")

# 获取某个section中的所有的kv
value = config.items("section_name")

总结

ini配置文件的格式是section, key value形式构成的。
每个section就像是一个个的小组长,带着自己的几个组员。
就是是分组一样。



.ini文件,key都是字符串类型,但你是不能确定value的数据类型的。
所以在编写.ini文件的时候,不需添加“”来表示字符串,直接写就行。反正最后在读取的时候,都是默认string。最后在用的时候,再转换类型。
.get()  默认得到的value都是字符串,不管是port,年龄,还是分数
.getint()  整数,比如port
.getfloat()  # 浮点数
.getboolean()  # bool类型