1. 为什么写这篇文章
我使用配置的以下几种方式:
1. 类中的 __init__ 初始化方法中
2. 单独新建一个py文件来存放config配置
3. 使用const库来存放配置
看到其他人用的配置文件方式用的是 configparser ,我原则是看到好东西就想学,然后自己查了下资料,发现别人写的乱七八糟,然后就整理了一下,自己也测试好了,贴出来给大家借鉴一下,但更多的是给我自己看。
configparser 个人使用体会: 不好用,写、读、改配置麻烦,用完之后发现还是const好用
2. 创建配置项
import configparser
config = configparser.ConfigParser()
def writeConf():
"""写入配置文件"""
config['mysql'] = {
'host': '127.0.0.1',
'port': '3306',
'user': 'root',
'password': '123456'
}
config['hive'] = {
'host': '192.168.0.1',
'port': '27017',
'user': 'root',
'password': '123456'
}
with open('config.ini', 'a+', encoding='utf-8') as f:
config.write(f)
def main():
writeConf()
if __name__ == '__main__':
main()
运行完毕则会看到当前目录下会出现配置文件,内容如下
3. 读取并使用配置项
import configparser
config = configparser.ConfigParser()
def activeConf():
"""操作config 配置文件中所有的配置都是字符串类型"""
# 得到配置文件里面的数据
config.read('config.ini', encoding='utf-8')
# 查看config配置文件中的配置项(配置模块的名字)
print(config.sections()) # ['mysql', 'hive']
# 判断mysql是否在config配置中
print('mysql' in config) # True
print('hive' in config) # True
print('hbase' in config) # False
# 取值
mysql_host = config['mysql']['host']
print('mysql_host= ', mysql_host) # mysql_host= 127.0.0.1
# 循环读值
for key, values in config['hive'].items():
print(key, values)
'''
host 192.168.0.1
port 27017
user root
password 123456
'''
# 找到mysql下所有的键
print(config.options('mysql')) #['host', 'port', 'user', 'password']
# 找到hive下所有的键
print(config.options('hive')) #['host', 'port', 'user', 'password']
# 找到mysql下所有键值对
print(config.items('mysql')) # [('host', '127.0.0.1'), ('port', '3306'), ('user', 'root'), ('password', '123456')]
# 找到hive下所有键值对
print(config.items('hive')) # [('host', '192.168.0.1'), ('port', '27017'), ('user', 'root'), ('password', '123456')]
# 获取 mysql 下 的 host 的值
print(config.get('mysql', 'host')) # 127.0.0.1
# 另一种获取方式
print(config['mysql'].getint('port')) # port = 3306
# getint 将得到值转成 int 类型
port = config.getint('mysql', 'port')
print('port= ', port, type(port)) # port= 3306 <class 'int'>
# 同上
port = config.getfloat('mysql', 'port')
print('port= ', port, type(port)) # port= 3306.0 <class 'float'>
# 还有一个getboolean: config.getboolean()
#getboolean方法可以识别 'yes'/'no', 'on'/'off', 'true'/'false' and '1'/'0'等数据并转换为布尔值
def main():
activeConf()
if __name__ == '__main__':
main()
4. 增加配置项
import configparser
config = configparser.ConfigParser()
def addConfig():
# 可以在config.ini配置文件中手动添加配置
# 添加了中文就需要设置编码格式
# 手动添加的
'''
[tan]
name = '小明'
age = '男'
sex = 23
'''
# config.read('config.ini', encoding='utf-8')
config.read('config.ini')
# 增加一个配置项
config.add_section('yuan')
# 给这个配置项赋值
config.set('yuan', 'k2', '22222')
f = open('config.ini', "w")
config.write(f) # 写进文件
f.close()
'''
[yuan]
k2 = 22222
'''
def main():
addConfig()
if __name__ == '__main__':
main()
5. 修改配置项
import configparser
config = configparser.ConfigParser()
def updateConfig():
"""修改配置"""
config.read('config.ini')
# 修改yuan下面的配置项
config.set('yuan', 'k1', 'a1111')
config.set('yuan', 'k2', 'b2222')
config.set('yuan', 'k3', 'c3333')
config.set('yuan', 'k4', 'd4444')
'''
[yuan]
k2 = b2222
k1 = a1111
k3 = c3333
k4 = d4444
'''
f = open('config.ini', "w")
config.write(f) # 写进文件
f.close()
def main():
updateConfig()
if __name__ == '__main__':
main()
6. 删除配置项
import configparser
config = configparser.ConfigParser()
def removeConfig():
"""删除配置"""
config.read('config.ini')
# 删除掉 yuan 下的 k1 配置
config.remove_option('yuan', 'k1')
# 删除一个section, 将yuan整个配置都给删掉
config.remove_section('yuan')
f = open('config.ini', "w")
config.write(f) # 写进文件
f.close()
def main():
removeConfig()
if __name__ == '__main__':
main()
7. 全部代码
import configparser
config = configparser.ConfigParser()
def writeConf():
"""写入配置文件"""
config['mysql'] = {
'host': '127.0.0.1',
'port': '3306',
'user': 'root',
'password': '123456'
}
config['hive'] = {
'host': '192.168.0.1',
'port': '27017',
'user': 'root',
'password': '123456'
}
with open('config.ini', 'a+', encoding='utf-8') as f:
config.write(f)
def activeConf():
"""操作config 配置文件中所有的配置都是字符串类型"""
# 得到配置文件里面的数据
config.read('config.ini', encoding='utf-8')
# 查看config配置文件中的配置项(配置模块的名字)
print(config.sections()) # ['mysql', 'hive']
# 判断mysql是否在config配置中
print('mysql' in config) # True
print('hive' in config) # True
print('hbase' in config) # False
# 取值
mysql_host = config['mysql']['host']
print('mysql_host= ', mysql_host) # mysql_host= 127.0.0.1
# 循环读值
for key, values in config['hive'].items():
print(key, values)
'''
host 192.168.0.1
port 27017
user root
password 123456
'''
# 找到mysql下所有的键
print(config.options('mysql')) #['host', 'port', 'user', 'password']
# 找到hive下所有的键
print(config.options('hive')) #['host', 'port', 'user', 'password']
# 找到mysql下所有键值对
print(config.items('mysql')) # [('host', '127.0.0.1'), ('port', '3306'), ('user', 'root'), ('password', '123456')]
# 找到hive下所有键值对
print(config.items('hive')) # [('host', '192.168.0.1'), ('port', '27017'), ('user', 'root'), ('password', '123456')]
# 获取 mysql 下 的 host 的值
print(config.get('mysql', 'host')) # 127.0.0.1
# 另一种获取方式
print(config['mysql'].getint('port')) # port = 3306
# getint 将得到值转成 int 类型
port = config.getint('mysql', 'port')
print('port= ', port, type(port)) # port= 3306 <class 'int'>
# 同上
port = config.getfloat('mysql', 'port')
print('port= ', port, type(port)) # port= 3306.0 <class 'float'>
# 还有一个getboolean: config.getboolean()
#getboolean方法可以识别 'yes'/'no', 'on'/'off', 'true'/'false' and '1'/'0'等数据并转换为布尔值
def addConfig():
# 可以在config.ini配置文件中手动添加配置
# 添加了中文就需要设置编码格式
# 手动添加的
'''
[tan]
name = '小明'
age = '男'
sex = 23
'''
# config.read('config.ini', encoding='utf-8')
config.read('config.ini')
# 增加一个配置项
config.add_section('yuan')
# 给这个配置项赋值
config.set('yuan', 'k2', '22222')
f = open('config.ini', "w")
config.write(f) # 写进文件
f.close()
'''
[yuan]
k2 = 22222
'''
def updateConfig():
"""修改配置"""
config.read('config.ini')
# 修改yuan下面的配置项
config.set('yuan', 'k1', 'a1111')
config.set('yuan', 'k2', 'b2222')
config.set('yuan', 'k3', 'c3333')
config.set('yuan', 'k4', 'd4444')
'''
[yuan]
k2 = b2222
k1 = a1111
k3 = c3333
k4 = d4444
'''
f = open('config.ini', "w")
config.write(f) # 写进文件
f.close()
def removeConfig():
"""删除配置"""
config.read('config.ini')
# 删除掉 yuan 下的 k1 配置
config.remove_option('yuan', 'k1')
# 删除一个section, 将yuan整个配置都给删掉
config.remove_section('yuan')
f = open('config.ini', "w")
config.write(f) # 写进文件
f.close()
def main():
# writeConf()
# activeConf()
# addConfig()
# updateConfig()
removeConfig()
if __name__ == '__main__':
main()