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}")
关键修改点:
- 行拆分方式:用默认的
split()(按任意空格拆分)替代split(':'),正确提取From行的第二个元素(邮箱地址)。 - 清理空白字符:用
strip()去除邮箱地址前后的空格、换行符等无效空白。 - 输出格式控制:使用f-string格式化输出,保证邮箱和计数在同一行,无多余空格。
修改后即可得到符合要求的输出:cwen@iupui.edu 5
内容的提问来源于stack exchange,提问作者Jimmy McGill
相关产品推荐
相关产品推荐

