You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么使用Python的configparser时需要将读写操作分开?

问题原因解析

1. 方法调用错误是sections返回空的直接原因

ConfigParser的read()方法接收的是ini文件的路径字符串/路径序列,不是打开的文件对象。你把文件对象fp传给read()方法时,程序会尝试查找文件名等于该文件对象字符串表示的文件,自然读取不到任何内容,所以config.sections()永远返回空列表,每次运行都会重复新增section和对应的配置项。
如果要直接从文件对象读取内容,应该调用config.read_file(fp)方法。

2. 文件指针和打开模式的问题是追加重复内容的核心原因

  • 不管是a+还是r+模式,只要执行完读取文件内容的操作,文件指针都会移动到文件末尾。
  • a/a+模式的特性是:任何写入操作都会强制追加到文件末尾,不受指针位置影响;r+模式虽然支持覆盖写入,但此时指针已经在末尾,写入还是会变成追加操作。
    所以哪怕你读取配置成功了,写入的时候也不会覆盖原有内容,只会在后面追加新的配置段,导致重复条目出现。

3. 分开读写正常的原因

你改成先读配置、再用w模式打开文件写入的逻辑后:

  • w模式打开文件时会直接清空原有文件内容,写入的是完整的全新配置,不会有遗留内容
  • 读和写分别用独立的文件句柄,不会互相干扰指针位置,也不会出现模式限制的问题

推荐的正确写法
import configparser

config = configparser.ConfigParser()
# 直接传文件路径读取,无需手动打开文件
config.read('config.ini', encoding='utf-8')

if 'section' not in config:
    config.add_section('section')
config['section']['option'] = 'value'

# 写入时单独用w模式打开文件
with open('config.ini', 'w', encoding='utf-8') as fp:
    config.write(fp)

内容的提问来源于stack exchange,提问作者demberto

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:45:05