Python 进阶(十八):配置文件(configparser 模块)

在这里插入图片描述

大家好,我是水滴~~

configparser模块是Python标准库中的一个模块,用于解析配置文件。它提供了一种简单而灵活的方式来读取、修改和写入INI格式的配置文件。本文将介绍该模块是如何操作配置文件的。

文章中包含大量的示例代码,希望能够帮助新手同学快速入门。

《Python入门核心技术》专栏总目录・点这里

文章目录

  • 前言
  • 一、INI 文件介绍
  • 二、使用 `configparser` 操作配置文件
    • 2.1 创建配置文件
    • 2.2 读取配置文件
    • 2.3 获取配置项
      • 2.3.1 获取配置项的值
      • 2.3.2 获取特定类型配置项的值
      • 2.3.3 获取节列表
      • 2.3.4 获取指定节的配置项列表
    • 2.4 修改节
      • 2.4.1 判断节是否存在
      • 2.4.2 添加新的节
      • 2.4.3 删除节
    • 2.5 修改配置项
      • 2.5.1 判断配置项是否存在
      • 2.5.2 修改配置项的值
      • 2.5.3 添加新的配置项
      • 2.5.4 删除配置项
    • 2.6 写入配置文件
  • 三、完整代码
  • 总结


前言

配置文件是应用程序中常用的一种方式,它可以存储参数、设置和选项,使得程序在不修改源代码的情况下能够进行配置和调整。Python的configparser模块提供了一种简单而强大的方式来解析配置文件。本教程将详细介绍configparser模块的使用方法,并提供代码示例。

一、INI 文件介绍

INI文件(INI stands for “Initialization”) 是一种常见的配置文件格式,用于存储应用程序的配置信息。它由一系列节(sections)和键值对(key-value pairs)组成。

INI文件的结构如下:

  • 节(Sections):节用方括号括起来,例如 [section_name]。节用于将相关的键值对进行分组。
  • 键值对(Key-Value Pairs):键值对由键和值组成,键和值之间使用等号或冒号进行分隔。例如 key1 = value1 或者 key2: value2

以下是一个示例的INI文件:

[section1]
key1 = value1
key2 = value2[section2]
key3 = value3
key4 = value4

在这个示例中,有两个节:section1section2,每个节下面有两个键值对。

INI文件常用于存储应用程序的配置信息,例如数据库连接参数、日志设置、界面选项等。它的简单结构使得配置文件易于编写和阅读,并且可以方便地修改和扩展。

二、使用 configparser 操作配置文件

在Python中,可以使用configparser模块来解析和处理INI文件。该模块提供了一种简单而灵活的方式来读取、修改和写入INI文件中的配置项和值。

2.1 创建配置文件

首先,我们需要创建一个配置文件,通常使用INI格式。使用文本编辑器创建一个新的文件,例如config.ini,并按照以下格式编写配置项和对应的值:

[section1]
key1 = value1
key2 = value2[section2]
key3 = value3
key4 = value4[section3]
key5 = 10
key6 = 1.2
key7 = true

在这个示例中,我们创建了两个节(section),每个节下面有两个配置项。

2.2 读取配置文件

通过configparser模块,我们可以轻松地读取配置文件的内容。首先,导入configparser模块:

import configparser

然后,创建ConfigParser对象:

config = configparser.ConfigParser()

接下来,使用read()方法读取配置文件:

config.read('config.ini')

你可以指定配置文件的路径和文件名。

2.3 获取配置项

2.3.1 获取配置项的值

一旦配置文件被读取,我们可以使用get()方法获取配置项的值。使用节名和配置项的键作为参数:

v1 = config.get('section1', 'key1')
v2 = config.get('section2', 'key4')

这样,我们就可以获取配置项的值并存储在变量中。

2.3.2 获取特定类型配置项的值

使用get() 方法获取的值类型为字符串,如果想要获取特定类型的值,可以使用下面方法:

v3 = config.getint('section3', 'key5')
v4 = config.getfloat('section3', 'key6')
v5 = config.getboolean('section3', 'key7')

2.3.3 获取节列表

使用 sections()方法可以获取所有节的列表,返回类型为 list

sections = config.sections()

2.3.4 获取指定节的配置项列表

使用 options() 方法可以获取指定节的配置项列表,返回类型为 list

keys = config.options('section3')

2.4 修改节

2.4.1 判断节是否存在

在操作节之前通常要判断是否存在,如果操作不存在的节会,抛出 configparser.NoSectionError 异常。

config.has_section('section1')

该值返回bool,如果存在值为 True,如果不存在值为 False

2.4.2 添加新的节

如果想要添加新的节,可以使用add_section()方法。

config.add_section('section4')
config.add_section('section5')

上面代码会添加两个新的节。

2.4.3 删除节

如果想要删除节,可以使用 remove_section() 方法。

config.remove_section('section4')

2.5 修改配置项

2.5.1 判断配置项是否存在

在操作配置项前通常需要判断是否存在,如果操作不存在的配置,会抛出 configparser.NoOptionError 异常。

v8 = config.has_option('section1', 'key1')
v9 = config.has_option('section1', 'key10')

该值返回bool,如果存在值为 True,如果不存在值为 False

2.5.2 修改配置项的值

如果需要修改配置项的值,可以使用set()方法。同样,需要提供节名和配置项的键,以及新的值:

config.set('section1', 'key1', 'new_value')

这将把配置项的值修改为新的值。

2.5.3 添加新的配置项

如果需要添加新的配置项,可以使用set()方法。同样,需要提供节名和新的键值对:

config.set('section5', 'key5', 'value5')

这将在配置文件中添加一个新的配置项。

2.5.4 删除配置项

如果需要删除配置项,可以使用remove_option()方法。需要提供节名和要删除的配置项的键:

config.remove_option('section2', 'key3')

这将删除配置文件中指定的配置项。

2.6 写入配置文件

在修改配置项之后,可以使用write()方法将更改写入配置文件:

with open('config.ini', 'w') as configfile:config.write(configfile)

这将把修改后的配置写回到原始的配置文件中。

三、完整代码

下面是一个完整的示例代码,演示了如何使用configparser模块读取、修改和写入配置文件:

import configparser# 创建ConfigParser对象
config = configparser.ConfigParser()# 读取配置文件
config.read('config.ini')# 获取配置项的值
v1 = config.get('section1', 'key1')
v2 = config.get('section2', 'key4')
print(v1)
print(v2)
print('---------------------')# 获取特定类型配置项的值
v3 = config.getint('section3', 'key5')
v4 = config.getfloat('section3', 'key6')
v5 = config.getboolean('section3', 'key7')
print(v3)
print(v4)
print(v5)
print('---------------------')# 获取节列表
sections = config.sections()
print(sections)
print('---------------------')# 获取指定节的配置项列表
keys = config.options('section3')
print(keys)
print('---------------------')# 判断节是否存在
v6 = config.has_section('section1')
v7 = config.has_section('section10')
print(v6)
print(v7)
print('---------------------')# 添加新的节
config.add_section('section4')
config.add_section('section5')# 删除节
config.remove_section('section4')# 判断配置项是否存在
v8 = config.has_option('section1', 'key1')
v9 = config.has_option('section1', 'key10')
print(v8)
print(v9)# 修改配置项的值
config.set('section1', 'key1', 'new_value')# 添加新的配置项
config.set('section5', 'key5', 'value5')# 删除配置项
config.remove_option('section2', 'key3')# 写入配置文件
with open('config.ini', 'w') as configfile:config.write(configfile)

代码执行后,控制台输出内容:

value1
value4
---------------------
10
1.2
True
---------------------
['section1', 'section2', 'section3']
---------------------
['key5', 'key6', 'key7']
---------------------
True
False
---------------------
True
False

config.ini 配置文件内容变成:

[section1]
key1 = new_value
key2 = value2[section2]
key4 = value4[section3]
key5 = 10
key6 = 1.2
key7 = true[section5]
key5 = value5

总结

通过configparser模块,我们可以方便地解析和处理INI格式的配置文件。它提供了读取、获取、修改、添加和删除配置项的方法,使得配置文件的处理变得简单而直观。在实际项目中,配置文件对于管理参数、选项和设置非常有用,可以提高程序的灵活性和可配置性。
通过本教程,你应该已经了解了如何使用configparser模块来解析配置文件,以及如何读取、修改和写入配置项的值。希望这个教程对你理解和使用configparser模块有所帮助!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Docker七 | 搭建Swarm集群

目录 创建Swarm集群 创建管理节点 增加工作节点 查看集群 部署服务 新建服务 查看服务 服务伸缩 增加服务 减少服务 删除服务 创建Swarm集群 创建管理节点 在192.168.117.131下执行docker swarm init命令的节点自动成为管理节点 [rootlocalhost ~]# docker swar…

同化的题解

时间限制: 1000ms 空间限制: 524288kB 题目描述 古人云:“近朱者赤近墨者黑”。这句话是很有道理的。这不鱼大大和一群苦命打工仔被安排进厂拧螺丝了。 进厂第一天,每个人拧螺丝的动力k都是不同且十分高涨的。但是当大家坐在一起后会聊天偷懒&#xf…

axios配置请求头content-type 和 get/post请求方式

axios配置请求头content-type https://blog.csdn.net/wojiushiwo945you/article/details/107653962 axios 是Ajax的一个插件,axios虽然是一个插件,但是我们不需要通过Vue.use(axios)来使用,下载完成后,只需在项目中引入即可。(一…

如何利用腾讯文档提升办公效率?

1. 实时协作功能:利用腾讯文档的实时协作功能,多人可以同时编辑和评论文档,大大提高团队工作效率。2. 云存储和同步:通过云存储和同步功能,方便地存储、访问和分享文档,不再受到时间和地点的限制。3. 版本控…

Google Ad帐号被封?这几个关键点看好

海外广告投放工作中,账号是非常重要的环节。与在Facebook上运行广告相比,运行Google Ads在代理选择方面通常没有那么严格,因为 Google 对 IP 使用并不那么严格。但是,这并不意味着您可以不加考虑地使用任何代理IP。在本文中&#…

Kubernetes (三) 集群升级

一. 集群升级 v1.23.15----v1.24.0 官网地址: https://v1-24.docs.kubernetes.io/zh-cn/docs/tasks/administer-cluster/kubeadm/kubeadm-upgrade/ kubectl里边内…

2023.12.28力扣每日一题——收集巧克力

2023.12.28 题目来源我的题解(参考力扣官方题解)方法一 枚举方法二 二次差分 题目来源 力扣每日一题;题序:2735 我的题解(参考力扣官方题解) 嗯……今天不会,就当一次搬运工吧。 方法一 枚举…

WEB 3D技术 three.js 设置环境贴图 高光贴图 场景设置 光照贴图

上文WEB 3D技术 three.js 基础网格材质演示几何体贴图 ao贴图效果我们简单构建了一个贴图和ao贴图的几何体材质 我们接下来 来看一下透明度贴图 我们还是官网搜索 MeshBasicMaterial 然后 是我们的 alphaMap 属性 这里 黑色为完全透明 白色 完全不透明 黑白之间还有灰色 这个灰…

基于SSM实现的电动汽车充电网点管理系统

一、系统架构 前端:jsp | jquery | bootstrap | css 后端:spring | springmvc | jdbc 环境:jdk1.8 | mysql 二、代码及数据库 三、功能介绍 01. web端-首页 02. web端-登录 03. web端-注册 04. web端-我要充电 05. web端-个人中心-消…

thinkphp6.0升级到8.0

目录 一:升级过程 二:报错处理 最近写的项目需要使用thinkphp8.0,之前的老项目需要从php6.0升级到8.0,特此记录下升级过程。 一:升级过程 查看版本: php think version,我目前的版本是6.1.4 生成thin…

SuperMap Hi-Fi 3D SDK for Unity矢量面贴地贴模型

作者:kele 一、背景 SuperMap Hi-Fi 3D SDK(2023 11i) for Unity推出新功能:支持矢量面同时贴地形图层和模型图层,并且能实现数据点击查询属性、更改初始填充颜色、初始边框线颜色、选中填充颜色、选中边框线颜色、控…

【强化学习】基于蒙特卡洛MC与时序差分TD的简易21点游戏应用

1. 本文将强化学习方法(MC、Sarsa、Q learning)应用于“S21点的简单纸牌游戏”。 类似于Sutton和Barto的21点游戏示例,但请注意,纸牌游戏的规则是不同且非标准的。 2. 为方便描述,过程使用代码截图,文末附链…