首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

每日一模块:configparser

配置文件是开发过程中经常用到的,一般习惯将常量以及数据库、第三方接口地址等等配置在一个专门的文件里,便于需要更新时不用修改代码只需修改配置文件即可,这样大大的减少因为误操作代码导致的风险出现。而配置文件中ini文件也是工作中经常用到的,Python中通常使用内置模块configparser来解析配置文件。

ini文件的常见特点

1. 中括号[]内包含的为section,每一个section下每个配置为key-value格式

2. section的名字是区分大小写的,而key的名字是不区分大小写的

3. 键值对可用=或者:进行分隔

4. 键值对中,头部和尾部的空白符会被去掉

5. 配置文件可以包含注释,注释以#或者;为前缀

6. 获取每个option的值都是字符串

使用

1. 读取

import configparser

from pathlib import Path

base_dir = Path(__file__).resolve().parent

file_path = Path(base_dir, 'config.ini')

# 读取config.ini文件: 本质是构建一个大字典

config_obj = configparser.ConfigParser()

config_obj.read(file_path, encoding="utf-8")

2. 逻辑判断

# 判断是否存在指定的节点section或option是否存在

assert "Oracle" in config_obj, "不存在时提示此信息"

flag = config_obj.has_section("oracle")

flag1 = config_obj.has_option("Oracle", "port")

print(flag, flag1)3. 增

# 增加节点section

if not config_obj.has_section("Mongo"):

config_obj.add_section("Mongo")

config_obj.write(fp=open(file_path, 'w'))

# 增加节点section及下面的配置options

if not config_obj.has_option("MongoDb", "port"):

config_obj.add_section("MongoDb")

config_obj.set("MongoDb", "port", "27017")

config_obj.set("MongoDb", "host", "127.0.0.3")

config_obj.write(fp=open(file_path, 'w'))4. 删

# 删除指定的section

config_obj.remove_section("Mongo")

print(config_obj.sections())

config_obj.write(fp=open(file_path, 'w'))

# 删除指定section下的配置

config_obj.remove_option("MongoDb", "host")

config_obj.write(fp=open(file_path, 'w'))5. 改

# 修改指定section下某个配置的值

config_obj.set(section="Oracle", option="user", value="china")

config_obj.write(fp=open(file_path, "w"))6. 查

# 获取所有节点section

sections = config_obj.sections()

print(sections)

"""

['mysql', 'Oracle']

"""

# 获取指定section下配置的所有键key

print(config_obj.options("mysql"))

"""

['host', 'port', 'user', 'password']

"""

# 获取指定section下指定key的值

print(config_obj.get(section="mysql", option="host"))

print(config_obj["mysql"]["host"])

"""

127.0.0.1

"""

# 获取指定section下所有的配置信息

print(config_obj.items("mysql"))

"""

[('host', '127.0.0.1'), ('port', '3306'), ('user', 'admin'), ('password', 'admin2024')]

"""7. 拓展

同时只能识别一种占位符格式,不能ini文件中配置多种不同的占位符格式

# 因为从ini配置中读取的配置值都为字符串,但有些配置例如端口是int类型的,所以需要通过指定方法读取

port = config_obj.getint("mysql", "port")

port = config_obj.getfloat("mysql", "port")

port = config_obj.getboolean("mysql", "open_thread")

print(port, type(port))

# 对占位符的识别,需要初始化,指定interpolation为BasicInterpolation(),则配置中的`%(key)s`会被解析

config = configparser.ConfigParser(interpolation=configparser.BasicInterpolation())

config.read(file_path)

print(config.sections())

print(config.get("LogConfig", "log_path"))

# 对占位符${key}或${section:key}的识别,需指定interpolation为ExtendedInterpolation()

config2 = configparser.ConfigParser(interpolation=configparser.ExtendedInterpolation())

config2.read(file_path)

print(config2.sections())

print(config2.get("Log", "log_debug"))  # /opt/log/debug

print(config2.get("LogF", "my_log_path"))  # /opt/log/test/python

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O4Q3cJDD9aE3O71GuMUIHupw0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券