如上所述,我是初学者,我正在尝试做短期练习。不幸的是,我的在线辅导员无法或不愿意帮助我(继续建议其他方法)。
我的任务是检查该行的第一个单词是否为“From”,在这种情况下我需要打印下一个单词(电子邮件地址)。
例如,该文件包含一系列行,如下所示
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
我只是想了解为什么会这样,以及我如何纠正这个问题。请你不要花时间分享替代品。
由于
答案 0 :(得分:0)
IndexError
表示您正在尝试访问不存在的列表的某些部分(例如,尝试查找[1, 2, 3]
的第5个值)。
最好知道文件的一小部分内容或示例输入和所需的输出,这样我们就可以确切地知道出了什么问题。
答案 1 :(得分: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),你可以打印测试[1],这将是第二个单词(电子邮件)。
“。split()”是你的错误,因为这是用空格或选择的不同字符分割字符串的原因。
希望这有帮助!
答案 2 :(得分:0)
谢谢大家!
原来问题是文件中有一些空行,所以我需要嵌套一个if函数来保持它的移动。
谢谢!