IndexError:从文件中检索文本时列出索引超出范围

时间:2017-10-13 21:03:49

标签: python

我试图在python中创建一个测验,我需要从外部文本文件中检索多个问题。 我成功地检索了第一个问题,但是我得到的#34;列表索引超出范围"尝试检索第二个时出错。

这是我当前代码的片段。

if choice1 == "CH":
        choice2 = input ("Would you like to do the easy, medium or hard questions ?").lower()
        if choice2 == "easy":
            load_profile = open("chemistryquiz.txt","r")
            question1 = load_profile.read().splitlines()[4]
            print (question1)
            question2 = load_profile.read().splitlines()[5]
            print (question2)

如果我对问题2发表任何评论,该程序的效果非常好。我哪里出错了? P.S,我检查了文本文件,并确保该行的编号为5,我知道你在python编程时从0开始计数。

此外,这些是chemistryquiz.txt

的内容
Chemistry Quiz :

Easy :

1) What is the chemical symbol of Carbon ? A: C B: Ca
2) What is the weight of an electron ? A: 0 B: 0.1

2 个答案:

答案 0 :(得分:2)

让我们一步一步:

load_profile = open("chemistryquiz.txt","r")

文件已打开;你有一个文件句柄 load_profile 。 文件书签位于文件的开头。

question1 = load_profile.read().splitlines()[4]

您已阅读整个文件,将其拆分为行,并将第5行分配给 question1

print (question1)
question2 = load_profile.read().splitlines()[5]

由于书签仍在文件的末尾, read()仅返回EOF。 分界线没有任何用处。没有元素5。 KABOOM!的。

返回文件中读取行的文本。例如......

with open("chemistryquiz.txt","r") as load_profile:
    for input_line in load_profile:
        # This loop will give you the file, one line at a time.

答案 1 :(得分:1)

你的问题是,你多次拨打load_profile.read()。每次调用它时,它都会从任何先前文件读取功能停止的位置开始读取。但是第一个调用会读取整个文件,因此第二个调用没有任何内容可供阅读。它返回一个空字符串,splitlines()返回一个空列表。

只需阅读一次文件。

lines = load_profile.read().splitlines()
question1 = lines[4]
question2 = lines[5]