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

Python邮件统计代码输出存在多余空格与换行,如何修正?

问题描述

我正在完成Coursera Python课程第9.4章节的作业。

编写程序读取mbox-short.txt文件,找出发送邮件数量最多的用户。程序需识别以'From '开头的行,取该行第二个单词作为发件人邮箱;创建Python字典映射发件人邮箱到其出现次数;遍历字典找出发送邮件最多的用户。

我的代码如下:

name = input("Enter file:")
if len(name) < 1:
    name = "mbox-short.txt"
handle = open(name)

emails = dict()
addresses = list()

for lines in handle:
    line = lines.split(':')
    if line[0] == 'From':
        addresses.append(line[1])
        
for address in addresses:
    emails[address] = emails.get(address, 0) + 1

bigcount = None
bigemail = None

for address,count in emails.items():
    if bigcount is None or count > bigcount:
        bigemail = address
        bigcount = count
        
print(bigemail,bigcount)

运行后输出为:

cwen@iupui.edu
 5

正确输出应为:

cwen@iupui.edu 5

我尝试在第一个for循环后使用lines.rstrip()处理,虽然能让两个变量在同一行输出,但会在前后添加空格,仍然不符合要求。请问如何修正代码以消除输出中的多余空格与换行?


问题分析与修正

你的代码核心问题出在行拆分逻辑错误:以From 开头的行格式是From 邮箱地址 其他内容,应该用空格拆分而非冒号,同时你提取的邮箱地址带有多余空白字符,导致输出异常。

修改后的代码如下:

name = input("Enter file:")
if len(name) < 1:
    name = "mbox-short.txt"
handle = open(name)

emails = dict()

for line in handle:
    # 跳过非"From "开头的行(注意空格,避免匹配"From:"开头的行)
    if not line.startswith('From '):
        continue
    # 按任意空格拆分行,取第二个元素作为邮箱
    parts = line.split()
    email = parts[1].strip()  # 清除邮箱前后的空格、换行符
    emails[email] = emails.get(email, 0) + 1

bigcount = None
bigemail = None

for address, count in emails.items():
    if bigcount is None or count > bigcount:
        bigemail = address
        bigcount = count

# 格式化输出,确保内容在同一行且无多余空格
print(f"{bigemail} {bigcount}")

关键修改点:

  1. 行拆分方式:用默认的split()(按任意空格拆分)替代split(':'),正确提取From 行的第二个元素(邮箱地址)。
  2. 清理空白字符:用strip()去除邮箱地址前后的空格、换行符等无效空白。
  3. 输出格式控制:使用f-string格式化输出,保证邮箱和计数在同一行,无多余空格。

修改后即可得到符合要求的输出:cwen@iupui.edu 5

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 06:10:43