尽管行号正确,但“列表索引超出范围”

时间:2020-05-20 18:42:08

标签: python

我想尽可能地避免在这里发布愚蠢的问题,但是我不确定如何自己解决这个问题。我正在尝试读取文件中的特定行(行号完全不变),但出现错误。我可以通过遍历文件来打印文件中的每一行,但是读取它自己需要的特定行(或除行0以外的任何行)会抛出错误,尽管它在以前的版本中有效(最近的更改使该行混乱我需要向下调1,然后根据需要调整行号。

该函数的此区域中发生错误:

with open("wallet.txt","r") as file:
    rawcurrency = file.readlines()[0]
    linesplit = rawcurrency.split(": ")
    currency = linesplit[1]
    rawbalance = file.readlines()[3]
    linesplit = rawbalance.split(": ")
    global balance
    balance = linesplit[1]

此行引发错误:

rawbalance = file.readlines()[3]

这是我正在读取的文件的样子:

Currency used: £
Creation Date: 20/05/2020 19:28:31
Starting Wallet Amount = 500.0
Balance: 500.0

如果该解决方案很简单,我感到抱歉。

2 个答案:

答案 0 :(得分:1)

正如DYZ所指出的,您阅读两次。无论如何,一个更简单,更直接的解决方案:

import linecache
...
raw_currency = linecache.getline("wallet.txt", 1)  # Get line 1
raw_balance =  linecache.getline("wallet.txt", 4)  # Get line 4
...

答案 1 :(得分:0)

问题在于该功能 readlines() 读取整个文件并返回文件中的行列表。 您第一次拨打电话,

file.readlines()[0]

为您工作,因为它读取了整个文件,并且您访问了列表的第一个索引,而这恰好是您实际需要的行。 您第二次致电

file.readlines()[3]

抛出异常,因为它从上次调用中到达的位置读取了整个文件,该位置是文件的末尾,这意味着由于没有更多行可读取,它返回了一个空列表。然后,您尝试访问列表中的第三个索引(该索引不存在,因此是例外)。