文章目录
一、前言
在项目开发过程中,为了提高代码的可读性和降低维护成本,将一些通用信息写入配置文件,将重复使用的方法写成公共模块进行封装,使用时候直接调用即可。
这篇博客,主要介绍python中利用configparser模块读写配置文件的方法。才疏学浅,仅供参考!
二、configparser模块简介
configparser模块支持读取.conf和.ini等类型的文件,其官方模块说明请移步:ConfigParse 官方文档
三、configparser操作配置文件格式
[section1]
k1 = v1
k2:v2
user=egon
age=18
is_admin=true
salary=31
[section2]
k1 = v1
ini文件结构需要注意一下几点:
- 键值对可用=或者:进行分隔
- section的名字是区分大小写的,key的名字是不区分大小写的
- 键值对中头部和尾部的空白符会被去掉
- 值可以为多行
- 配置文件可以包含注释,注释以#或者;为前缀
四、configparser的基本使用
创建my.ini文件方便ConfigParser类来解析
[mysqld]
charater-server-set='utf-8'
default-engine='innodb'
skip-grant-table=True
part=3306
[client]
user='root'
password='123456'
上面的 mysqld 和client 称之为: section
上面client中的 user称之为: option
个人更愿意理解为: 组-属性
4.1 读取操作
import configparser
config = configparser.ConfigParser() # 类中一个方法 #实例化一个对象
config.read('my.ini', encoding="utf-8") # 读ini文件
print(config.sections()) # 获取所有section节点,返回值为list
print(config.options('mysqld')) # 获取指定section节点下的所有options的key值
print(config.get('client', 'user')) # 获取指定的section节点下的指定的key的值(value)
print(config.items('client')) # 获取指定的section节点下所有的option的key-value
# 判断对应的section或option是否存在:
print(config.has_section('aaa')) # 判断是否存在对应的section ,如无返回布尔值False
print(config.has_option('client', 'user')) # 判断section中是否存在对应的option ,如有,返回True
config.get()拓展操作:
# config.get()拓展操作
print(type(config.get('client', 'user'))) # get()方法返回的是 <class 'str'>
print(type(config.getint('mysqld','part'))) # getint()方法直接返回的是<class 'int'>
print(config.getint('mysqld','part')) # 直接返回 int类型数据:3306,如果该option无int类型数据则报错
print(config.getboolean('mysqld', 'skip-grant-table')) # 返回布尔值 True
print(config.getfloat('mysqld','part')) # 返回float类型数据 3306.0
结果:
<class 'str'>
<class 'int'>
3306
True
3306.0
4.2 写入操作
# 新增一个section
config.add_section("emali_tel")
print(config.sections())
# >>>['mysqld', 'client', 'emali_tel']
# section里面新增key和value
config.set("emali_tel", "sender", "yoyo1@tel.com")
config.set("emali_tel", "port", "265")
print(config.items('emali_tel')) # 打印结果
#>>> [('sender', 'yoyo1@tel.com'), ('port', '265')]
4.3 修改操作
section无法修改,只能先把旧的删除,再重新写入
# 修改option的值。属性不存在时功能为添加。若组不存在会报错。
config.set('mysqld', 'password', 'python2020') # 将密码改成python2020 ,并新增到mysqld下
print(config.items('mysqld'))
config.set('client', 'password', 'python2020') # 如果存在,则直接修改
print(config.get('client', 'password')) # 结果python2020
4.4 删除操作
# 删除一个 section中的一个 item(以键值KEY为标识)
config.remove_option('emali_tel', "port")
items = config.items('emali_tel')
print(items) # list里面对象是元祖 [('sender', 'yoyo1@tel.com')]
# 删除一个 section
config.remove_section('emali_tel')
sects = config.sections()
print(sects) # list里面对象是元祖 ['mysqld', 'client']
4.5 写入文件
前面讲的remove和set方法并没有真正的修改ini文件内容,只有当执行conf.write()方法的时候,才会修改ini文件内容。
# write写入文件两种方式
config.write(open('my.ini', 'w',encoding='utf-8')) # 删除原文件重新写入
config.write(open('my2.ini', 'a', encoding='utf-8')) # 指定编码,追加模式写入新文件
4.6 创建操作
import configparser
config = configparser.ConfigParser() # 类中一个方法 #实例化一个对象
# 方式一创建
# 创建一个 section,并未section设置一个option ,如果value设置为int类型则会报错
config["DEFAULT"] = {'ServerAliveInterval': '45',
'Compression': False,
'CompressionLevel': '9'}
# 方式二 创建
config['bitbucket.org'] = {}
config['bitbucket.org']['User'] = 'hg'
# 方式三创建
config['topsecret.server.com'] = {}
topsecret = config['topsecret.server.com']
topsecret['Host Port'] = '50022' # mutates the parser
topsecret['ForwardX11'] = 'no' # same here
# 在DEFAULT下新增一个ForwardX11
config['DEFAULT']['ForwardX11'] = 'yes'
# 写入文件
with open('example1.ini', 'w') as configfile:
config.write(configfile) # config.write()写入到创建的文件中
来源:CSDN
作者:金鞍少年
链接:https://blog.csdn.net/weixin_42444693/article/details/104536384