-2

如前所述,我是一个初学者,正在尝试做一些简短的练习。不幸的是,我的在线导师无法或不愿意帮助我(不断建议其他方法)。

我的任务是检查该行的第一个单词是否是“发件人”,在这种情况下,我需要打印下一个单词(电子邮件地址)。

例如,该文件有一系列如下所示的行

From stephen.marquard@uct.ac.za Sat Jan  5 09:14:16 2008    
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.90])  
by frankenstein.mail.umich.edu (Cyrus v2.3.8) with LMTPA;
From louis@media.berkeley.edu Fri Jan  4 18:10:48 2008
Return-Path: <postmaster@collab.sakaiproject.org>
Received: from murder (mail.umich.edu [141.211.14.97])

代码应产生以下输出:

stephen.marquard@uct.ac.za
louis@media.berkeley.edu

我编写了以下代码来执行此操作:

fname = "mbox-short.txt"
f = open(fname,'r')

lines = f.readlines()
i = 0
count = len(lines)

while i < count :
    test = lines[i].split()
    if test[0] == "From " :
        print(test[1])
    i += 1

我不断收到以下错误:

Traceback (most recent call last):
  File "C:\Users\38775\Desktop\py4e\Project 2\email.py", line 10, in <module>
    if test[0] == "From " :
IndexError: list index out of range

我只是想了解为什么会发生这种情况,以及如何纠正这种情况。要求您不要花时间分享替代方案。

谢谢

4

3 回答 3

0

所以这里是对你所拥有的东西的修改:

fname = "mbox-short.txt"
f = open(fname,'r')

lines = f.readlines()
i = 0
count = len(lines)


while i < count :
    test = lines[i].strip().split()
    if test[0] == "From":
        print(test[1])
    i += 1

在你“strip()”之后,你会得到这个“来自 email@email.com”。您需要添加“.split()”以将其拆分为两个部分的列表,例如 ['From', 'email@email.com']。现在如果 test[0] == "From" (如果第一个词是 From),您可以打印 test[1] 这将是第二个词(电子邮件)。

“.split()”是你的错误,因为那是用空格或选择的不同字符分割字符串的原因。

希望这可以帮助!

于 2018-01-05T05:06:28.510 回答
0

感谢大家!

原来问题是文件中有一些空白行,所以我需要嵌套一个 if 函数来保持它的移动。

谢谢!

于 2018-01-05T09:10:08.803 回答
0

AnIndexError表示您正在尝试访问不存在的列表的某些部分(例如,尝试查找 的第 5 个值[1, 2, 3])。最好知道文件内容的一小部分或示例输入和所需的输出,这样我们就可以准确地找出问题所在。

于 2018-01-05T04:59:18.883 回答