python ConfigParser

本文档介绍了使用Python的ConfigParser模块时遇到的两个常见问题及其解决方案。第一个问题是由于BOM编码导致的UnicodeDecodeError,通过指定'utf-8-sig'编码可以解决。第二个问题是ConfigParser在处理包含特殊符号%的配置项时出现的InterpolationSyntaxError,通过使用RawConfigParser或异常处理避免该错误。

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

问题:

>>> import configparser
>>> parser=configparser.ConfigParser()
>>> con=parser.read("Chinese.ini")
Traceback (most recent call last):
  File "<pyshell#5>", line 1, in <module>
    con=parser.read("Chinese.ini")
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 697, in read
    self._read(fp, filename)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 1015, in _read
    for lineno, line in enumerate(fp, start=1):
UnicodeDecodeError: 'gbk' codec can't decode byte 0xad in position 21: illegal multibyte sequence

原因关键字:BOM,\ufeff
解决:

>>> con=parser.read("Chinese.ini",encoding="utf-8-sig")

参考资料来源:今天忘记记录,下次再记录算了。

***************************************************************************************************************************

问题:

>>> for sect in parser.sections():
    print("==============={}==============".format(sect))
    for opt in parser.options(sect):
        s=parser.get(sect,opt)
        print("{}={}".format(opt,s))

Traceback (most recent call last):
  File "<pyshell#40>", line 4, in <module>
    s=parser.get(sect,opt)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 800, in get
    d)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 394, in before_get
    self._interpolate_some(parser, option, L, value, section, defaults, 1)
  File "C:\Program Files (x86)\Microsoft Visual Studio\Shared\Anaconda3_64\lib\configparser.py", line 444, in _interpolate_some
    "found: %r" % (rest,))
configparser.InterpolationSyntaxError: '%' must be followed by '%' or '(', found: '%d 人的未限制點播房間)'

原因关键字:特殊符号%,get

改进:

>>> for sect in parser.sections():
    print("==============={}==============".format(sect))
    for opt in parser.options(sect):
        try:
            s=parser.get(sect,opt)
        except:
            print("{}-->{} error! passed..".format(sect,opt))
        print("{}={}".format(opt,s))

最终:

>>> parser=configparser.RawConfigParser()

>>> parser.read("Chinese.ini",encoding="utf-8-sig")
['Chinese.ini']
>>> for sect in parser.sections():
    print("==============={}==============".format(sect))
    for opt in parser.options(sect):
        s=parser.get(sect,opt)
        print("{}={}".format(opt,s))

参考资料来源:--

### Python `configparser` 模块的使用说明 #### 简介 `configparser` 是 Python 中用于处理配置文件的一个标准库模块。它允许开发者通过 INI 风格的配置文件来管理应用程序的设置[^4]。 #### 基本功能 该模块支持读取、写入以及修改配置文件的内容。以下是其主要功能: - **解析配置文件**:可以轻松加载 `.ini` 文件并从中提取键值对。 - **更新配置项**:能够动态更改配置文件中的值。 - **保存配置到文件**:可将内存中的配置数据重新写回到磁盘上的文件中。 #### 示例代码 以下是一个简单的例子展示如何创建、读取和修改配置: ```python import configparser # 创建 ConfigParser 对象 config = configparser.ConfigParser() # 添加一节 (section) 并设定一些选项 (options) config['DEFAULT'] = {'ServerAliveInterval': '45', 'Compression': 'yes', 'CompressionLevel': '9'} config['bitbucket.org'] = {} config['bitbucket.org']['User'] = 'hg' config['topsecret.server.com'] = {} topsecret = config['topsecret.server.com'] topsecret['Port'] = '50022' # mutates the parser topsecret['ForwardX11'] = 'no' # 将配置写入文件 with open('example.ini', 'w') as configfile: config.read_dict(config._sections) # 可选操作,仅当需要从字典初始化时使用 config.write(configfile) # 读取已有的配置文件 config.read('example.ini') # 访问特定 section 的 option 值 print(config['bitbucket.org']['User']) # 输出: hg # 修改现有 value 或者添加新 key-value pair config.set('topsecret.server.com', 'PasswordAuthentication', 'no') ``` 以上脚本展示了怎样定义默认参数、增加新的 sections 和 options、把整个结构存回硬盘以及查询指定条目的具体方法[^5]。 #### 日志记录集成 如果希望结合日志系统一起工作,则可以通过如下方式实现更复杂的场景应用: ```python import logging.config cfg_file_path = '/path/to/logging.conf' logging.config.fileConfig(cfg_file_path) logger = logging.getLogger(__name__) if __name__ == "__main__": logger.debug("This is a debug message.") ``` 这里假设存在名为 `logging.conf` 的外部配置文档,其中包含了关于不同 handler 类型及其属性的信息。这样做的好处在于分离业务逻辑与基础设施级别的细节描述[^6]。 #### 注意事项 尽管 `configparser` 提供了许多便利之处,但在实际开发过程中仍需注意几点最佳实践建议: - 总是以 UTF-8 编码存储您的配置文件以确保兼容性和一致性; - 谨慎对待敏感信息比如密码之类的字段最好加密后再放入配置当中; - 定期备份重要配置以防意外丢失;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值