您的位置:首页 >Python使用configparser模块解析ini文件的方法步骤
发布于2026-05-20 阅读(0)
扫一扫,手机访问
在Python项目里,配置文件是绕不开的一环。而INI文件,以其结构清晰、简单易读的特点,至今仍是许多开发者的首选格式。今天,我们就来深入聊聊,如何用Python标准库中的configparser模块,优雅地驾驭这种配置文件。

在动手写代码之前,先得搞清楚INI文件长什么样。它的结构非常直观,主要由两部分构成:节(section)和键值对(key-value)。
[Section1] key1 = value1 key2 = value2 [Section2] key3 = value3
简单拆解一下:
[SectionName]包裹,作用是把相关的配置项归到一组,方便管理。key = value,等号(或冒号)两边可以有空格。#或;开头的行,会被视为注释,解析器通常会忽略它们。好消息是,Python已经内置了处理INI文件的利器——configparser模块,这意味着你无需安装任何额外包,开箱即用。
它的基本操作流程,可以概括为下面几个步骤:
第一步,导入模块:
import configparser
第二步,创建解析器对象:
config = configparser.ConfigParser()
第三步,读取INI文件:
config.read('config.ini') # 这个方法会返回一个成功读取的文件名列表
第四步,访问你需要的配置项:
value = config.get('Section1', 'key1') # 获取到的value是字符串类型
掌握了基本流程,我们来看看configparser都提供了哪些实用的方法。
想了解配置文件的全貌?这几个方法很常用:
# 获取文件中所有的节(section)
sections = config.sections()
# 获取某个节下面所有的键(key)
keys = config.options('Section1')
# 获取某个节下面所有的键值对,以元组列表的形式返回
items = config.items('Section1') # 结果类似:[('key1', 'value1'), ('key2', 'value2')]
配置文件里经常不只有字符串,还有数字、布尔值。直接获取并转换类型,能省去你手动转换的麻烦:
value_int = config.getint('Section1', 'key1')
value_float = config.getfloat('Section1', 'key2')
value_bool = config.getboolean('Section2', 'key3')
在读取之前先检查一下节或键是否存在,是个好习惯,可以避免程序因配置项缺失而崩溃:
has_section = config.has_section('Section1')
has_key = config.has_option('Section1', 'key1')
除了读,动态修改或创建配置文件也是常见需求。
# 添加一个新的节
config.add_section('NewSection')
# 在指定节下设置或修改一个键值对
config.set('NewSection', 'new_key', 'new_value')
# 删除一个键
config.remove_option('Section1', 'key1')
# 删除整个节(注意,这会同时删除该节下的所有键)
config.remove_section('Section1')
# 最后,别忘了把修改写回文件
with open('new_config.ini', 'w') as f:
config.write(f)
有时候,我们希望为某些配置项提供一个“保底”的默认值。configparser提供了两种思路:
一种是在初始化解析器时,通过defaults参数设置一个默认节(名字就叫DEFAULT),所有其他节在查找键时,如果找不到,都会去这里找。
另一种更灵活的方式,是在调用get方法时直接指定一个回退值(fallback):
value = config.get('Section1', 'key1', fallback="default_value")
# 如果'Section1'节里没有'key1',那么value就会被赋值为"default_value"
ConfigParser的构造函数提供了一些参数,让你可以微调它的行为,以适应不同格式的INI文件:
config = configparser.ConfigParser(
allow_no_value=True, # 允许键没有对应的值(比如有些配置项只起开关作用)
delimiters=('=', ':'), # 指定哪些字符可以作为键和值之间的分隔符
comment_prefixes=('#', ';'), # 指定哪些字符表示注释
strict=False # 设为False可以容忍重复的节或键(不报错),True则会严格检查
)
理论说再多,不如看两段实际的代码来得直观。
import configparser
config = configparser.ConfigParser()
config.read('config.ini')
for section in config.sections():
print(f'[{section}]')
for key, value in config.items(section):
print(f'{key} = {value}')
# 假设我们已经读取了config.ini
config.set('Section1', 'key1', 'updated_value') # 修改现有值
config.add_section('NewSection') # 新增一个节
config.set('NewSection', 'new_key', '123') # 在新节下添加配置
# 将修改后的配置写入一个新文件
with open('updated_config.ini', 'w') as f:
config.write(f)
最后,有几个细节需要你留意,它们可能会在实际使用中带来一些小“惊喜”:
configparser会把所有的键名都转换成小写。也就是说,配置文件里的ServerPort和代码里写的serverport会被认为是同一个键。如果你需要保持大小写,可以通过config = configparser.ConfigParser(converters={})来禁用转换器。configparser在读取文件时会忽略注释,写入时也不会保留原有的注释格式。如果你的配置文件注释很重要,可以考虑使用configobj这类第三方库。open函数并显式指定编码(如utf-8)来读取文件内容,再交给解析器处理。总的来说,对于绝大多数标准的INI文件读写需求,Python自带的configparser模块已经足够强大和便捷。当然,如果你的配置结构异常复杂,比如需要嵌套节或者更严格的类型验证,那么了解一下configobj或者转向更现代的toml格式,也是不错的选择。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8