繁体   English   中英

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

[英]IndexError : list index out of range when retrieving text from a file

我正在尝试在python中创建测验,并且我需要从外部文本文件中检索多个问题。 我设法成功检索了第一个问题,但是在尝试检索第二个问题时出现“列表索引超出范围”错误。

这就是我当前代码的一部分。

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提出任何评论,则该程序可以正常运行。哪里出错了? PS,我检查了文本文件,并确保行号是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

让我们逐步完成:

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.

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

只需读取一次文件。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM