Python3 中 configparser 模块解析配置的用法详解

本文详细介绍了Python3的configparser模块,用于解析配置文件。内容包括模块的简介,如初始化实例、获取sections、keys及values,以及对[DEFAULT] section的操作。此外,还提及了configparser与Python2.x的ConfigParser的区别和一些特殊用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

configparser 简介

configparser 是 Pyhton 标准库中用来解析配置文件的模块,并且内置方法和字典非常接近。Python2.x 中名为 ConfigParser,3.x 已更名小写,并加入了一些新功能。
配置文件的格式如下:

[DEFAULT]
ServerAliveInterval = 45
Compression = yes
CompressionLevel = 9
ForwardX11 = yes

[bitbucket.org]
User = Tom

[topsecret.com]
Port: 50022
ForwardX11: no

“[ ]”包含的为 section,section 下面为类似于 key - value 的配置内容;
configparser 默认支持 ‘=’ ‘:’ 两种分隔。


configparser 常用方法

初始化实例

使用 configparser 首先需要初始化实例,并读取配置文件:

>>> import configparser
>>> config = configparser.ConfigParser()	# 注意大小写
>>> config.read("config.ini")	# 配置文件的路径
["config.ini"]

或者可以直接读字典

>>> parser = configparser.ConfigParser()
>>> parser.read_dict({'section1': {'key1': 'value1',
...                                'key2': 'value2',
...                                'key3': 'value3'},
...                   'section2': {'keyA': 'valueA',
...                                'keyB': 'valueB',
...                                'keyC': 'valueC'},
...                   'section3': {'foo': 'x',
...                                'bar': 'y',
...                                'baz': 'z'}
... })
获取所有 sections
>>> config.sections()
['bitbucket.org', 'topsecret.com']    # 注意会过滤掉[DEFAULT]
获取指定 section 的 keys & values
>>> config.items('topsecret.com')
>>>> [('port', '50022'), ('forwardx11', 'no')]    # 注意items()返回的字符串会全变成小写
获取指定 section 的 keys
>>> config.options('topsecret.com')
['Port', 'ForwardX11']
>>> for option in config['topsecret.com']:
...	    print(option)
Port
ForwardX11
获取指定 key 的 value
>>> config['bitbucket.org']['User']
'Tom'
>>> config.get('bitbucket.org', 'User')
'Tom'
>>> config.getint('topsecret.com', 'Port')
50022
检查
>>> 'DEFAULT' in config
True
>>> 'test' in config['section_test']
False
>>> 'Tom' in config['bitbucket.org']['User']
True
>>> config.has_section('bitbucket.org')
True
>>> config.has_option('section_test', 'test')
False
添加
>>> config.add_section('Section_1')
>>> config.set('Section_1', 'key_1', 'value_1')    # 注意键值是用set()方法
>>> config.write(open('config.ini', 'w'))    # 一定要写入才生效
删除
>>> config.remove_option('Section_1', 'key_1')
True
>>> config.remove_section('Section_1')
True
>>> config.clear()	# 清空除[DEFAULT]之外所有内容
>>> config.write(open('config.ini', 'w'))

关于 [DEFAULT]

[DEFAULT] 一般包含 ini 格式配置文件的默认项,所以 configparser 部分方法会自动跳过这个 section 。
前面已经提到 sections() 是获取不到的,还有删除方法对 [DEFAULT] 也无效:

>>> config.remove_section('DEFAULT')
False
>>> config.clear()
>>> 'DEFAULT' in config
True
>>> 'ForwardX11' in config['DEFAULT']
True
>>> config.sections()
[]

但指定删除和修改 [DEFAULT] 里的 keys & values 是可以的:

>>> config.remove_option('DEFAULT', 'ForwardX11')
True
>>> config.set('DEFAULT', 'ForwardX11','no')
>>> config['DEFAULT']['ForwardX11']
'no'

还有个特殊的是,has_section() 也无效,可以和 in 区别使用

>>> config.has_section('DEFAULT')
False
>>> 'DEFAULT' in config
True

更多用法请看官方文档:
https://docs.python.org/3.6/library/configparser.html


微信公众号


新开了微信公众号:面向人生编程
编程思维不应只存留在代码之中,更应伴随于整个人生旅途,所以公众号里不只聊技术,还会聊产品/互联网/经济学等广泛话题,所以也欢迎非程序员关注。

<think>好的,我现在需要详细介绍一下Python中的configparser模块的语法和功能。首先,我得回忆一下自己对这个模块的了解。configparserPython标准中用于处理配置文件的模块,主要用来读取和写入INI格式的文件。INI文件通常由节(section)、键(key)和值(value)组成,结构比较清晰。 接下来,我需要确认用户的需求。他们可能想知道如何安装、导入这个模块,以及如何使用它来读写配置文件。此外,用户可能还关心一些高级功能,比如类型转换、默认值处理,或者处理特殊字符的情况。 首先,安装方面,configparser是标准的一部分,所以不需要额外安装,但要注意Python版本。在Python 3中,模块名是小写的configparser,而在Python 2中可能是ConfigParser。不过现在应该主要考虑Python 3的情况。 然后,语法和功能部分需要分点说明。比如,创建配置文件的结构,如何读取和解析文件,如何获取值,处理默认值,写入配置等。此外,还要提到一些常见的问题,比如大小写敏感、特殊字符的处理,以及类型转换的方法。 可能需要注意的细节包括:configparser默认情况下会将键名转换为小写,除非设置raw参数。还有,如何处理布尔值,比如使用getboolean方法。另外,当配置文件中包含百分号%时,需要使用%%来转义,避免被误认为是字符串插值。 另外,可能需要提到DEFAULT特殊节,这个节中的键值会被其他节继承。这在有多个节共享相同配置时非常有用。 然后,关于错误处理,比如当文件不存在,或者节、键不存在时,如何处理异常。比如,使用has_section或has_option方法先检查是否存在,或者捕获特定的异常如NoSectionError或NoOptionError。 还要提到不同的数据类型的获取方法,比如getint、getfloat、getboolean,以及如何用get方法获取原始字符串。 在写配置文件时,需要创建ConfigParser对象,添加节,设置键值,然后写入文件。注意写入时的顺序和格式控制,比如是否保留注释等,但通常configparser不会保留注释,这点需要说明。 可能还需要比较configparser与其他配置文件处理的优缺点,比如json、yaml,但用户的问题主要关注configparser,所以这部分可能不需要展开。 最后,给出一个完整的示例,涵盖读取、修改、写入配置文件的流程,这样用户能更直观地理解用法。 需要确保步骤清晰,语法正确,比如正确使用$...$和$$...$$格式,但用户的问题是关于Python模块,可能数学公式较少,但如果有涉及数学表达式的地方需要注意格式。 现在,需要组织这些信息,按照结构化的方式呈现,分点介绍,包括基本概念、核心语法、功能详解、使用示例和注意事项。确保语言简洁,中文表达准确,避免技术术语的误用。 可能还需要检查是否有遗漏的功能,比如插值功能,即可以在值中引用其他键的值,例如在配置中使用%(key)s的形式来引用同一节或其他节中的值。但需要注意,默认情况下插值可能启用,或者需要特别设置。 另外,安全方面,如果处理不可信的配置文件,插值功能可能存在安全风险,比如访问文件系统或其他资源,因此SafeConfigParser的存在,但Python 3中可能有所变化,需要确认当前版本的处理方式。 总之,我需要按照逻辑顺序,从模块简介、基本用法、读取配置、写入配置、数据类型处理、特殊节和继承、异常处理、注意事项等方面进行详细说明,并辅以代码示例,确保用户能够逐步理解和应用。</think>### Python `configparser` 模块详解 #### 一、模块简介 `configparser` 是 Python 标准中用于处理 **INI 格式配置文件** 的模块,支持: - 配置文件读写 - 分层结构(节、键值对) - 类型自动转换(整数、浮点数、布尔值) - 默认值继承 - 插值表达式(引用其他键的值) 适用于程序配置、参数存储等场景。 --- #### 二、核心语法与功能 ##### 1. 配置文件结构 INI 文件格式示例: ```ini [DEFAULT] server_ip = 127.0.0.1 port = 8080 [Database] user = admin password = 123456 connection = %(server_ip)s:%(port)s # 插值表达式 ``` - **节 (Section)**:用 `[section_name]` 定义,如 `[Database]` - **键值对 (Key-Value)**:格式为 `key = value` - **DEFAULT 节**:特殊节,其他节会继承其键值对 --- ##### 2. 读取配置文件 ```python import configparser config = configparser.ConfigParser() config.read(&#39;config.ini&#39;) # 读取文件 # 检查节是否存在 print(config.has_section(&#39;Database&#39;)) # 输出: True # 获取所有节 sections = config.sections() # 输出: [&#39;Database&#39;] ``` ##### 3. 获取键值对 ```python # 获取字符串 db_user = config.get(&#39;Database&#39;, &#39;user&#39;) # 输出: &#39;admin&#39; # 类型转换 port = config.getint(&#39;DEFAULT&#39;, &#39;port&#39;) # 输出: 8080 (int) enable_log = config.getboolean(&#39;Log&#39;, &#39;enable&#39;, fallback=False) # 默认值 # 插值表达式 connection = config[&#39;Database&#39;][&#39;connection&#39;] # 输出: &#39;127.0.0.1:8080&#39; ``` ##### 4. 写入配置文件 ```python config = configparser.ConfigParser() # 添加节并设置键值 config[&#39;DEFAULT&#39;] = {&#39;timeout&#39;: &#39;30&#39;, &#39;debug&#39;: &#39;False&#39;} config[&#39;Path&#39;] = {&#39;data_dir&#39;: &#39;/var/data&#39;} # 写入文件 with open(&#39;new_config.ini&#39;, &#39;w&#39;) as f: config.write(f) ``` ##### 5. 特殊功能 - **默认值继承**:所有节自动继承 `[DEFAULT]` 的键值 - **大小写敏感控制**:初始化时设置 `config = ConfigParser(allow_no_value=False, inline_comment_prefixes=(&#39;#&#39;,))` - **保留原始格式**:使用 `read_file()` 和 `read_string()` 解析文本 --- #### 三、注意事项 1. **类型转换方法**: - `getint()`, `getfloat()`, `getboolean()` - 布尔值支持 `yes/no`, `on/off`, `true/false` 2. **键值格式**: - 默认键名**转为小写**(可通过 `optionxform=lambda x: x` 禁用) - 值中的 `%` 需转义为 `%%` 3. **错误处理**: ```python try: value = config.get(&#39;Network&#39;, &#39;proxy&#39;) except (configparser.NoSectionError, configparser.NoOptionError) as e: print(f"配置缺失: {e}") ``` --- #### 四、完整示例 ```python import configparser # 读取配置 config = configparser.ConfigParser() config.read(&#39;app.ini&#39;) # 修改配置 config.set(&#39;Database&#39;, &#39;password&#39;, &#39;654321&#39;) # 添加新节 config.add_section(&#39;Log&#39;) config.set(&#39;Log&#39;, &#39;level&#39;, &#39;INFO&#39;) # 保存配置 with open(&#39;app_updated.ini&#39;, &#39;w&#39;) as f: config.write(f) ``` --- #### 五、适用场景 - 程序启动参数配置 - 多环境切换(开发/生产) - 动态参数存储(如用户设置) 通过 `configparser` 可高效管理结构化配置,避免硬编码问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值