为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?

Posted

技术标签:

【中文标题】为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?【英文标题】:why getting lis index out of range error while reading file with readlines()?为什么在使用 readlines() 读取文件时出现列表索引超出范围错误? 【发布时间】:2020-10-27 09:19:07 【问题描述】:

我只是一个python初学者,所以我想练习读写文件。 (我使用的是 python 3)

Decision = input("""Would you like to 'Write' (W)?
                \nWould you like to 'Read' (R)?""")

if Decision == "W":
    fileInput = input("What file Would you like to Write to?")
    write(fileInput)

elif Decision == "R":
    fileInput = input("What file would you like to Read?")
    lineNoInput = input("How many lines would you like to read?")
    read(fileInput, lineNoInput)

我想制作一个让你读写文件的程序。我还没有写信给他们,但我正在制作一个 read() 函数,它不断吐出错误。

def read(file, lineNo):
    fileName = file + ".txt"
    text_file = open(fileName, "r")

    lineNo = int(lineNo)

    for x in range(0, lineNo - 1):
        print(text_file.readlines()[x])

    text_file.close()

由于某种我无法解决的原因,决定读取多少行的用户输入不断吐出索引错误。

抱歉,如果我的代码笨拙或无效,正如我之前所说的,我仍然是初学者,我将不胜感激任何关于为什么会发生这种情况的意见。

【问题讨论】:

你一直在循环中调用函数text_file.readlines(),但在第一次调用之后,它会从文件中读取所有行。在每次连续迭代中,返回的值都是一个空列表。解决方案:在循环之前调用一次函数。事实上,你根本不需要循环。 【参考方案1】:
    for x in range(0, lineNo - 1):
        print(text_file.readlines()[x]) 

调用 readlines 方法的错误。 readlines() 方法返回一个列表,其中包含文件中的每一行作为列表项。这个方法应该只调用一次!!下次调用它会得到空列表[]

如果您想逐行读取文件,则通常使用上下文管理器来读取文件。

从技术上讲,在 Python 中,迭代器是一个实现 iterator protocol 的对象,它由 __iter__()__next__() 方法组成。 由于文件在iterator protocol 之后,您可以使用 for 循环读取它们:

with open (fileName,'r') as fP:
    for line in fp:
        #do work

无需调用close()。这是退出 with 块后由上下文管理器处理的文件将被关闭。

为了限制要读取的行数,它在遍历文件时简单地使用行数计数器:

lines_num = 10
with open (fileName,'r') as fP:
    for line in fp:
        #do work
        lines_num -= 1
        if not lines_num: break

【讨论】:

以上是关于为啥在使用 readlines() 读取文件时出现列表索引超出范围错误?的主要内容,如果未能解决你的问题,请参考以下文章

遍历大量文件时出现readLines错误。

为啥在使用 Android MediaPlayer 读取 H.264 编码的 rtsp 流时出现“不支持的格式”错误?

为啥使用 readUTF 阅读时出现 EOF 异常?

为啥在尝试安装 React 时出现“无法读取未定义的属性(读取'服务器')”?我该如何解决?

在 R 中打开 CSV 文件时出现错误消息

为啥我在使用 java.util.zip.ZipFile 打开空 ZIP 文件时出现异常?