Python 添加配置文件(.ini, .py, .json, etc)
配置文件必要性
- 集中管理,统一修改,降低修改难度,避免修改不全面
- 代码和参数分离,方便不同模块代码中重复调用,保持核心代码整洁
常用配置文件比较
配置文件复杂度比 ini < json ≈ toml < yaml
格式类型 | 优点 | 缺点 |
---|---|---|
config.ini | 通用格式,格式简单 | 不适合存储大量数据 |
config.json | 通用格式,可嵌套,适合存放大量的结构化配置或者本地数据 | 嵌套过深的问题,容易导致出错;语法标准严格限制,无法在当中写注释 |
config.py / setting.py | 在python工程中方便通过import方式导入 | 不利于非 Python 的平台进行配置文件共享 |
1. ini 配置文件[1]
使用 “ import configparser ”导入configparser模块,即可实现配置文件的写入、更新、删除、读取等操作。
读 :
config.get("section", "option")
# 获取指定section下的options
config.getint("section", "option")
# 将获取到值转换为int型
config.getboolean("section", "option")
# 将获取到值转换为bool型
config.getfloat("section", "option")
# 将获取到值转换为浮点型
更新:
config.set("section_mod", "option", "option_value")
# 修改section_mod的option
config.add_section("section_add")
# 添加section节点
config.set("section_add", "option", "option_value")
# 设置指定section_add的options
检查:
config.options('section')
# 获取指定section 的options即该节点的所有键
config.has_section("section")
# 是否存在该section
config.has_option("section", "option")
# 是否存在该option
删除:
config.remove_section("section_rmv")
# 整个section_rmv下的所有内容都将删除
config.remove_option("section_rmv", 'option')
# 删除section_rmv下的指定option
保存:
config.write(open("Config", "w"))
# 保存config
注意事项
-
读取都是字符串,无需在配置的时候写成字符串
-
读取字符串不区分大小写
参考链接 1.
2. json 配置文件
>>> import json >>> from pprint import pprint >>> with open('/Users/Bobot/db.json') as j: ... cfg = json.load(j)['localdb'] ... >>> pprint(cfg) {'database': 'mysql', 'host': '127.0.0.1', 'password': '123456', 'port': 3306, 'user': 'root'}
使用json.load()读取json文件,读入的词典,无法直接用键值当做变量,常规需要 database = cfg ['database']
赋值方式来配置变量,若变量增多,配置过程会非常繁琐。通过 globals().update(config)
可以实现字典的变量访问,globals()
获得(模块级)全局变量所组成的字典,修改该字典等同修改全局变量,所以通过 .update(config)
可以将 config
字典内容转为变量[2]。
a_dict = {"key": "value"} globals().update(a_dict) print(key)
3. 初始化类
config.ini
[first_section] option1 = 1 option2 = 0 option3 = 3.4
config.json
{ "localdb":{ "host": "127.0.0.1", "user": "root", "password": "123456", "port": 3306, "database": "mysql" } }
initDemo()
import configparser import json class initDemo(): def __init__(self,fp1,fp2): self.fp1 = fp1 # .json 文件路径 self.fp2 = fp2 # .ini 文件路径 def read_json_config(self): """"读取json配置文件""" with open(self.fp1) as json_file: config = json.load(json_file)['localdb'] return config def read_ini_config(self): """"读取ini配置文件""" config = configparser.ConfigParser() config.read(self.fp2, encoding="utf-8") first_section_items = dict(config.items("first_section")) all_keys = config.options('first_section') # 只能识别小写,获取指定section 的options即该节点的所有键 item1 = config.getint('first_section','item1') # 将获取到值转换为int型 itme2 = config.getboolean('first_section','item2') # 将获取到值转换为bool型 item3 = config.getfloat('first_section','item3') # 将获取到值转换为浮点型 return def update_json_config(self, config): """"更新配置文件""" with open(self.fp1, 'w') as json_file: json.dump(config, json_file) return None
本文作者:Oddpage
本文链接:https://www.cnblogs.com/oddpage/p/16106996.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步