如何在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
相关产品推荐
相关产品推荐

