欢迎使用皮肤 Geek|

Oddpage

园龄:3年2个月粉丝:3关注:1

2022-04-06 16:08阅读: 2031评论: 0推荐: 0

Python 添加配置文件(.ini, .py, .json, etc)

配置文件必要性

  1. 集中管理,统一修改,降低修改难度,避免修改不全面
  2. 代码和参数分离,方便不同模块代码中重复调用,保持核心代码整洁

常用配置文件比较

配置文件复杂度比 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. 读取字符串不区分大小写

参考链接 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

  1. python中配置文件的使用方法 ↩︎

  2. Python3.用json作为配置文件 ↩︎

本文作者:Oddpage

本文链接:https://www.cnblogs.com/oddpage/p/16106996.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   Oddpage  阅读(2031)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起