Python处理邮件统计时split()拆分不全触发列表索引超出范围如何解决
错误原因
- 前缀匹配规则写错:代码中使用
line.startswith('From: ')做判断,匹配的是带冒号的发件人行,这类行格式固定为From: 邮箱地址,用split()拆分后仅包含2个元素,自然不存在索引为2的元素,触发list index is out of range报错。 - 需求要求匹配的是不带冒号的
From开头的行,即你提供的样本行格式From stephen.marquard@uct.ac.za Sat Jan 5 09:14:16 2008,这类行拆分后至少有7个元素,索引2对应的就是星期信息。
修复方法
- 修改前缀匹配规则,将
'From: '改为'From '(注意From后面带空格,避免匹配到类似Fromxxxx这类不符合规则的行) - 可选优化:增加拆分后列表的长度判断,避免极端场景下的索引越界问题
修复后代码如下:
file1 = open('short.txt') counts = dict() for line in file1: line = line.rstrip() # 修改匹配规则为不带冒号的From开头 if not line.startswith('From '): continue splited = line.split() # 加长度校验更稳妥 if len(splited) < 3: continue day = splited[2] counts[day] = counts.get(day, 0) + 1 print('Count of days:', counts)
内容的提问来源于stack exchange,提问作者Mahi
相关产品推荐
相关产品推荐

