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

如何在Python中从外部配置文件初始化数组类型变量?

从配置文件读取多收件人并转为数组的正确实现

我的配置文件内容如下:

[ERU]
    refreschtime = 15
    forwardToA = test@gmail.com
    forwardToB = test1@gmail.com, test2@gmail.com

我需要把forwardToB的值作为数组使用,这样就能遍历每个收件人执行以下操作:

for recipient in recipients:
     log.info(recipient)
     to_recipients.append(Mailbox(email_address=recipient))

脚本处理单个收件人时正常,但处理多个收件人时,会把整个逗号分隔的字符串当成数组的单个元素,导致遍历失败。我当前读取配置的代码是:

try:
    forwardToB = [config.get('ERU', 'forwardToB')]
except configparser.NoOptionError:
    log.critical('no forwardToB specified in configuration file')

请问如何正确实现从配置文件初始化数组类型变量?


解决方案

方法1:手动拆分字符串并清理格式

直接读取配置字符串后,用逗号分割,同时去掉每个元素的前后空格,还能过滤掉空元素(避免配置里出现多余逗号导致的无效项):

try:
    forward_str = config.get('ERU', 'forwardToB').strip()
    # 拆分并清理每个收件人地址
    recipients = [addr.strip() for addr in forward_str.split(',') if addr.strip()]
except configparser.NoOptionError:
    log.critical('no forwardToB specified in configuration file')
    recipients = []  # 初始化空数组,避免后续遍历报错

这个方法兼容性强,不管是单个收件人还是多个,都能正确生成数组:

  • 单个值test@gmail.com会转为['test@gmail.com']
  • 多个值test1@gmail.com, test2@gmail.com会转为['test1@gmail.com', 'test2@gmail.com']

方法2:用configparser原生getlist方法(Python 3.10+)

从Python 3.10开始,configparser内置了getlist方法,能直接解析逗号分隔的列表,还会自动处理元素前后的空格:

try:
    recipients = config.getlist('ERU', 'forwardToB')
except configparser.NoOptionError:
    log.critical('no forwardToB specified in configuration file')
    recipients = []

这个方法最简洁,推荐在Python版本允许的情况下使用。

方法3:自定义配置解析类(复杂场景适用)

如果需要更灵活的解析规则(比如支持其他分隔符、忽略注释等),可以自定义配置类继承configparser.ConfigParser,添加自定义的列表解析方法:

import configparser

class ListConfigParser(configparser.ConfigParser):
    def getlist(self, section, option, delimiter=','):
        value = self.get(section, option)
        return [item.strip() for item in value.split(delimiter) if item.strip()]

# 使用自定义类读取配置
config = ListConfigParser()
config.read('your_config.ini')

try:
    recipients = config.getlist('ERU', 'forwardToB')
except configparser.NoOptionError:
    log.critical('no forwardToB specified in configuration file')
    recipients = []

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 10:42:08