为啥在使用 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() 读取文件时出现列表索引超出范围错误?的主要内容,如果未能解决你的问题,请参考以下文章
为啥在使用 Android MediaPlayer 读取 H.264 编码的 rtsp 流时出现“不支持的格式”错误?