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

Python数据文件处理求助:提取20 Newsgroups数据集有效邮箱

解决20 Newsgroups数据集邮箱提取与统计任务

现有代码的问题分析

  • 文件操作逻辑错误:在main函数定义前就打开并关闭了文件,导致函数内调用infile.splitlines()时文件已关闭,触发IO错误。
  • str.find()用法错误:该方法第二个参数是搜索起始位置,无法同时判断行中是否包含@和.。
  • 未提取邮箱内容:仅打印包含目标字符的整行,没有从行中提取具体邮箱地址。
  • 缺少核心功能:完全未实现去重、写入输出文件、标注字符数、统计总数和平均长度的任务要求。

修正后的完整代码

def main():
    # 用集合自动实现邮箱去重
    unique_emails = set()
    
    # 使用with语句自动管理输入文件的打开/关闭
    with open("dataset.txt", "r") as infile:
        for line in infile:
            line = line.strip()
            # 先过滤包含@和.的行,再提取邮箱内容
            if "@" in line and "." in line:
                # 拆分行内容,定位包含@的片段(适配"From: xxx@yyy.com"这类常见格式)
                for part in line.split():
                    if "@" in part and "." in part:
                        # 去除邮箱前后可能的包裹标点(如<>、()、逗号等)
                        email = part.strip(",<>()[]")
                        # 基础格式校验:@不在首尾,且@之后存在.
                        if email.startswith("@") or email.endswith("@"):
                            continue
                        at_pos = email.index("@")
                        if "." not in email[at_pos+1:]:
                            continue
                        unique_emails.add(email)
    
    # 写入结果到输出文件
    with open("emails.txt", "w") as outfile:
        # 按字母排序后写入每个邮箱及字符数
        for email in sorted(unique_emails):
            char_count = len(email)
            outfile.write(f"{email} - 字符数: {char_count}\n")
        
        # 统计并写入总数与平均长度
        total = len(unique_emails)
        if total > 0:
            avg_length = sum(len(email) for email in unique_emails) / total
            outfile.write(f"\n邮箱总数: {total}\n")
            outfile.write(f"邮箱平均长度: {avg_length:.2f}\n")
        else:
            outfile.write("\n未找到有效邮箱\n")

if __name__ == "__main__":
    main()

关键功能说明

  • 自动文件管理:with语句确保文件在操作完成后自动关闭,避免资源泄漏。
  • 去重处理:利用集合的唯一性特性,自动过滤重复邮箱。
  • 邮箱提取与校验:拆分行内容定位邮箱片段,去除无关标点,并做基础格式校验,避免无效字符串被误判为邮箱。
  • 结果输出:排序后写入邮箱及字符数,最后统计总数和平均长度,无有效邮箱时给出提示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:31:02