Python代码输出重复原因咨询:提取FROM后邮箱为何重复输出
问题:从文本文件中提取From行后的电子邮件地址
原代码如下:
fname = input("Enter file name: ") fh = open(fname) count = 0 for line in fh: line = line.rstrip() if not line.startswith("From"): continue wds = line.split() print(wds[1]) count +=1 print("There were", count, "lines in the file with From as the first word")
输出示例:
stephen.marquard@uct.ac.za stephen.marquard@uct.ac.za louis@media.berkeley.edu louis@media.berkeley.edu zqian@umich.edu zqian@umich.edu
重复输出的原因分析
出现重复输出的核心原因无非两种:
- 源文本文件本身包含重复的行:从输出结果看,每个邮箱都连续出现两次,说明你的目标文件里存在完全一样的
From开头行,代码只是忠实地读取并输出了每一行对应的邮箱。 - 代码的匹配逻辑太宽泛:你的代码用
line.startswith("From")匹配所有以From开头的行,会同时命中From(作为独立单词开头)和From:(带冒号)这类行。如果文件里同一邮箱对应的From和From:行都存在,也会导致重复输出——比如部分邮件日志里,既有From user@example.com的行,也有From: user@example.com的行,两者都会被你的代码捕获。
如果是第二种情况,你可以把判断条件改成line.startswith("From ")(注意From后面加空格),这样只会匹配以From作为独立单词开头的行,避免误抓From:这类行。
内容的提问来源于stack exchange,提问作者Marcus Edmonds
相关产品推荐
相关产品推荐

