背景
在开发过程中,我们常常会用到一些固定参数或者是常量,对于这些较为固定且常用到的部分,往往会将其写到一个固定文件中,避免在不同的模块代码中重复出现从而保持核心代码整洁,此类固定文件通常被称为配置文件。python中有各种类型配置文件,如ini、yaml、toml、json、xml、py、txt、text、conf、cfg、properties等等,一般根据不同的系统平台和应用需求,选择适合的配置文件类型,最常见的大概有py、ini、yaml、toml、json,xml。
问题:python中用py文件也可做配置文件,为何要用其他格式文件作为配置文件呢?
回答:只是读取不变或者不需要修改的变量信息,一般使用py文件直接导入读取即可,简单方便,无需解释器解析配置,并可通过import模块,可在需要的地方随时随地读取和使用。但如果需要系统自动修改配置信息的时候,由于没有解释器的支持,我们不能定位其到原来配置文件中的位置,也无法结构化式的快速准确地修改配置,只能重新生成整个配置文件,进而带来注释丢失、变量顺序混乱痛点,这时采用其他格式文件类型(特别是带解释器模块)作配置文件就可以很好的解决该问题。
ini类型文件简介
ini最常见一种配置文件类型,其使用python自带的configparser模块实现配置文件的写入、更新、删除、读取等操作。如有使用依赖请安装: pip install configparser
ini结构:
片段(section)
选项(option)(相当于python字典里的key)
值(value)
中文乱码问题解决:
conf.read(path,encoding="utf-8")
ini类型文件操作
声明
import configparser
实例化
cf = configparser.ConfigParser()
读取
cf.read(filename) # 读取文件,返回filename的list
cf.sections() # 获取配置文件中所有sections的list
cf.options(section) # 获取指定section的键值list
cf.items(section) # 获取指定section下所有的键值对list
cf.get(section, key) # 获取指定section下指定key的value值, 返回str
cf.getint(section, key) # 获取指定sections下指定key的value值, 返回int
cf.getfloat(section, key) # 获取指定sections下指定key的value值, 返回float
cf.getboolean(section, key) # 获取指定sections下指定key的value值, 返回boolean
cf.has_section(section) # 获取是否包含某个section,返回boolean
cf.has_option(section,key) # 获取是否包含某个section的某个键,返回boolean
其他不常用拓展接口:
cf.optionxform(optionstr) # option大小写不敏感,实例化时内部通过该接口将option转换成小写
cf.read_dict(dictionary) # 从字典中的加载配置
cf.read_file(fd) # 从文件中加载配置
cf.read_string(str) # 从字符串中的加载配置
写入
先构造(注意判断是否已存在该section,不然写入时会报错):
list=cf.sections()
if section not in list:
cf.add_section(section) # 添加sections值
cf.set(section, option, value) # 在指定的sections中添加键值对
再真正写入:
f =open('config.ini', "w") # 注意路径
cf.write(f)
f.close()
删除
先构造:
cf.remove_section(section) # 移除sections, 返回boolean
cf.remove_option(section, option) # 移除指定sections下的options,
再真正写入:
f =open('config.ini', "w") # 注意路径
cf.write(f)
f.close()
configparser库参考:
https://docs.python.org/3.9/library/configparser.html
网友评论