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

Python编写邮箱分拣脚本无法正确分类有效/无效邮箱的问题排查

邮箱分拣代码错误排查与修复方案

原代码核心逻辑错误

  • 变量误用:函数传入的参数email实际是输入文件的路径,循环读取文件行的变量是line,但正则匹配、写文件时始终用的是文件路径字符串,完全没有对读取到的每一行邮箱内容做判断,本质是一直在校验"email-pack-1.txt"这个文件名是不是合法邮箱。
  • 内容未清洗:readlines()读取的每行内容末尾自带换行符,直接做正则匹配会导致合法邮箱因为末尾的换行符被误判为无效。
  • 文件操作不规范:输出文件用a+追加模式打开,之前运行产生的错误结果会残留到新文件里;所有打开的文件没有做关闭处理,极端情况会出现写入内容丢失;输入文件仅需读取权限,不需要用r+读写模式。
  • 正则错误:字符组内的|属于多余字符,原正则[A-Z|a-z]会把竖线|识别为域名的合法字符,不符合邮箱规则。
  • 输出格式问题:写入结果时没有加换行符,所有邮箱会拼接成一整行,后续无法正常读取。

修正后可直接运行的代码

import re

# 修正后的邮箱匹配正则
regex = re.compile(r'([A-Za-z0-9]+[.-_])*[A-Za-z0-9]+@[A-Za-z0-9-]+(\.[A-Za-z]{1,4})+')

def classify_emails(input_file):
    # 用with上下文管理器自动处理文件开闭,输出文件用w模式每次覆盖旧结果避免脏数据
    with open(input_file, 'r', encoding='utf-8') as f_in, \
         open("good_email.txt", 'w', encoding='utf-8') as f_good, \
         open("incorrect_emails.txt", 'w', encoding='utf-8') as f_bad:
        for line in f_in:
            # 去除每行首尾的空白、换行符,跳过空行
            email = line.strip()
            if not email:
                continue
            if regex.fullmatch(email):
                f_good.write(f"{email}\n")
                print(f"有效: {email}")
            else:
                f_bad.write(f"{email}\n")
                print(f"无效: {email}")

if __name__ == "__main__":
    classify_emails("email-pack-1.txt")

注意:如果你的邮箱源文件是GBK等其他编码,把代码里的encoding='utf-8'替换为对应编码即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.03 09:01:06