Python使用configparser管理配置文件

news2024/11/24 18:34:05

前言

在 Python 项目开发中,配置文件通常用于存储配置信息,例如数据库连接参数、日志设置、应用程序行为等。这些信息可以与代码分离,使得应用程序更易于维护和管理。Python 的标准库中提供了一个非常有用的模块——configparser,专门用于处理配置文件,通常是 .ini 格式的文件。

官网

https://docs.python.org/zh-cn/3.12/library/configparser.html#configparser.ConfigParser

什么是.ini文件

.ini 文件是一种简单的文本文件格式,用于存储配置信息。它由一个或多个 section 组成,每个 section 下包含一个或多个 option。每个 option 都有一个对应的值。其基本结构如下:

[section_name]
option_name1 = value1
option_name2 = value2

例如,假设我们有一个名为 config.ini 的配置文件,用于存储数据库连接信息:

[settings]
debug = true
log_level = info
output_file = /path/to/output

[database]
host = localhost
port = 5432
username = user
password = pass

使用configparser读取配置文件

首先,我们需要创建一个 ConfigParser 对象,并使用 read() 方法读取配置文件。接下来,可以通过 section 和 option 名字来获取对应的值:

import configparser

# 创建 ConfigParser 对象
config = configparser.ConfigParser()

# 读取配置文件
config.read('config.ini')

# 获取指定 section 下的 option 值
host = config['database']['host']
port = config['database']['port']
username = config['database']['username']
password = config['database']['password']

print(f"Database connection info: {host}:{port}, User: {username}")

configparser 处理的所有值都是字符串。如果你需要存储其他数据类型(如整数、布尔值等),可以使用转换函数:

import configparser

def read_config(file_path):
    # 创建ConfigParser对象
    config = configparser.ConfigParser()

    # 读取配置文件
    config.read(file_path)

    # 获取数据库配置
    db_host = config.get('database', 'host')
    db_port = config.getint('database', 'port')
    db_username = config.get('database', 'username')
    db_password = config.get('database', 'password')

    # 打印读取到的配置
    print(f"Database Host: {db_host}")
    print(f"Database Port: {db_port}")
    print(f"Database Username: {db_username}")
    print(f"Database Password: {db_password}")


if __name__ == "__main__":
    read_config('config.ini')

在这里插入图片描述

修改配置文件

configparser还允许我们修改配置文件中的数据,然后将修改后的内容写回文件:

# 修改数据库用户名
config['database']['username'] = 'new_user'

# 将修改后的配置写回文件
with open('config.ini', 'w') as configfile:
    config.write(configfile)

添加新的Section和Option

如果你需要在配置文件中添加新的 section 和 option,可以直接使用字典方式进行赋值:

# 添加新的 section 和 option
config['new_section'] = {}
config['new_section']['new_option'] = 'new_value'

# 保存到文件
with open('config.ini', 'w') as configfile:
    config.write(configfile)

配置文件的默认值

configparser 还支持设置默认值,这些默认值在特定 section 中找不到对应 option 时会被使用。默认值可以在创建 ConfigParser 对象时传递:

defaults = {'host': '127.0.0.1', 'port': '3306'}
config = configparser.ConfigParser(defaults=defaults)
config.read('config.ini')

# 如果 config.ini 中没有指定 host 和 port,将使用默认值
host = config['database'].get('host')
port = config['database'].get('port')

print(f"Using defaults - Host: {host}, Port: {port}")

总结

configparser 是一个强大且易于使用的工具,适用于需要管理配置文件的各种 Python 应用程序。它提供了丰富的功能,包括读取、修改、写入配置文件,设置默认值,支持多种数据类型等。通过合理使用 configparser,可以显著提高应用程序配置管理的灵活性和可维护性。

在项目开发中,建议将所有配置信息放入 .ini 文件中,并通过 configparser 来处理这些信息,从而使代码更加清晰、可维护性更高。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2039441.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

鸿蒙AI功能开发【卡证识别控件】场景视觉化服务

卡证识别控件 介绍 本示例展示了使用视觉类AI能力中的卡证识别能力。 本示例模拟了在应用里,跳转卡证识别控件,获取到验证结果并展示出来。 需要使用hiai引擎框架卡证识别验证接口kit.VisionKit.d.ts。 效果预览 使用说明: 在手机的主屏…

sp eric靶机渗透测试

一、靶机下载地址 https://www.vulnhub.com/entry/sp-eric,274/ 二、信息收集 1、主机发现 # 使用命令 nmap 192.168.145.0/24 -sn | grep -B 2 "00:0C:29:FD:57:BE" 2、端口扫描 # 使用命令 nmap 192.168.145.211 -p- -sV 3、指纹识别 # 使用命令 whatweb 192…

Cesium天空盒子(Skybox)制作(js代码)和显示

介绍 在Cesium中,星空背景是通过天空盒子方式(6张图片)来显示的,原生的图片分辨率太低,本项目用于生成天空盒子的6张图片。最终生成的6个图片大小约为500kb(每个),格式为jpg,总共的恒星数目约为…

【案例45】报表计算卡死问题排查

问题现象 月结期间报表计算没有反映,报表计算不出结果。情况十分着急。 问题分析 查看数据库发现,数据库有锁。相关锁源头的blocking_session为1144。 查看1144的执行机器名为nctest,非NC生产环境所在机器 由程序触发,很有可能在…

基于开源MaxKB构建大语言模型的本地知识库系统

基于开源MaxKB构建大语言模型的本地知识库系统 什么是MaxKB MaxKB是一款基于LLM(Large Language Model)大语言模型的知识库问答系统。MaxKB的产品命名内涵为“Max Knowledge Base”,为用户提供强大的学习能力和问答响应速度,致力…

Coggle数据科学 | 行业落地分享:大模型 RAG 汽车应用实践

本文来源公众号“Coggle数据科学”,仅用于学术分享,侵权删,干货满满。 原文链接:行业落地分享:大模型 RAG 汽车应用实践 在人工智能的浪潮下,大模型技术正以其强大的数据处理能力和深度学习能力&#xff…

【MySQL进阶】事务、存储引擎、索引

一、事务 1.概念 事务是一组操作的集合,它是一个不可分割的工作单位,事务会把所有的操作作为一个整体一起向 系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。 例子:转账,要求扣钱和进账…

PyTorch--卷积神经网络(CNN)模型实现手写数字识别

文章目录 前言完整代码代码解析1. 导入必要的库2. 设备配置3. 超参数设置4. 加载MNIST数据集5. 创建数据加载器6. 定义卷积神经网络模型7. 实例化模型并移动到设备8. 定义损失函数和优化器9. 训练模型10. 测试模型11. 保存模型 常用函数解析小改进数据集部分可视化训练过程可视…

阿里V2缺口图-滑块验证码逆向分析思路学习

一、声明! 原创文章,请勿转载! 本文内容仅限于安全研究,不公开具体源码。维护网络安全,人人有责。 文章中所有内容仅供学习交流使用,不用于其他任何目的,均已做脱敏处理&…

【Datawhale X 魔搭 】AI夏令营第四期大模型方向,Task1:智能编程助手(持续更新)

在一个数据驱动的世界里,人工智能的未来应由每一个愿意学习和探索的人共同塑造和掌握。希望这里是你实现AI梦想的起点。 大模型小白入门:https://linklearner.com/activity/14/11/25 大模型开发工程师能力测试:https://linklearner.com/activ…

20240810在荣品RK3588S-AHD开发板的预置Android13下挂载exFAT的256GB的TF卡

df -h mount fdisk无效 20240810在荣品RK3588S-AHD开发板的预置Android13下挂载exFAT的256GB的TF卡 2024/8/10 21:19 缘起:当时比较便宜96.9¥/想看看256GB的TF卡的高速卡的效果,就在京东入手了3张三星的高速TF卡。最近在弄RK3588S&#xff0c…

部署和体验llama3.1:8B中文微调版本

前言 llama-3-1 meta于2024-07-23发布 https://ai.meta.com/blog/meta-llama-3-1/ 文档 https://llama.meta.com/docs/llama-everywhere/running-meta-llama-on-linux/ git https://github.com/meta-llama/llama3 Cloudflare提供了免费访问的入口 https://linux.do/t/to…

uvm(7)factory

重载 针对任务或者函数,定义virtual;然后就可以重载 第二个是 约束的重载 然后 m_trans.crc_err_cons.constraint_mode(0); 这个是关闭此约束 m_trans.constraint_mode(0); 这是关闭所有约束 还可以集成原来的transation直接重写约束起到重载的作用 用factory重…

二十二、简易画图工具

目录 一、设计需求 二、示例代码 三、代码解析 1、setAutoFillBackground函数的作用 2、resizeEvent被调用的时机 四、Qt5双缓冲机制 五、总结 一、设计需求 实现一个简单的绘图工具,可以选择线型、线宽及颜色等基本要素。 二、示例代码 mainwindow.cpp #in…

Dijkstra算法c++详解

算法是一种用于寻找图中两点间最短路径的算法&#xff0c;适用于无负权边的图。下面是一个使用C实现的算法示例&#xff0c;使用优先队列来优化算法效率&#xff1a; #include <iostream> #include <climits> // For INT_MAX #include <vector> #include &l…

ptqt5 打包把资源文件合进exe文件中 单个exe文件即可

目录 安装 PyInstaller 项目结构 编写 spec 文件 修改代码以嵌入资源 打包应用程序 解释 检查打包结果 使用 PyQt5 开发的应用程序可以通过 PyInstaller 工具打包成单个可执行文件(exe),并将所有资源文件(如图像、图标、样式表等)嵌入到 exe 文件中。以下是如何实现…

利用java结合python实现gis在线绘图,主要技术java+python+matlab+idw+Kriging

主要技术javapythonmatlabidwKriging GIS中的等值面和等高线绘图主要用于表达连续空间数据的分布情况&#xff0c;特别适用于需要展示三维空间中某个变量随位置变化的应用场景。 具体来说&#xff0c;以下是一些适合使用GIS等值面和等高线绘图的场景&#xff1a; 地形与地貌分…

spring-security-1-快速入门

1 功能 身份认证(authentication)授权(authorization)防御常见攻击 身份认证&#xff1a;常见账号密码登录&#xff0c;短信登录 授权&#xff1a;什么样的角色&#xff0c;能看见什么菜单&#xff0c;能访问哪些接口。 2 pom <dependency><groupId>org.springf…

开关电源:优化电子产品中的能源使用

电压转换器是许多技术系统的支柱。根据应用的不同&#xff0c;所需的电源单元由变压器、整流器 AC/DC 转换器实现。当高性能开关电源尚未上市时&#xff0c;几乎只使用 50 Hz 变压器解决方案。 电源注意事项 电能几乎完全以三相电流的形式提供&#xff0c;系统电压为 10 ...3…

ThinkPHP5漏洞分析之文件包含

目录 漏洞概要 漏洞环境 环境搭建 配置 测试&#xff1a; 漏洞分析&#xff1a; extract: 参数 Lua::assign 示例 array_merge 说明 返回值 array_merge() 示例 fetch: 漏洞修复 漏洞概要 本次漏洞存在于 ThinkPHP 模板引擎中&#xff0c;在加载模版解析变量时…