Python for循环首次迭代后读取文件行提示索引越界,求解决方案
问题原因
你的代码里每次循环调用guide.readlines(),第一次调用会读取整个文件的所有行到列表,同时文件指针会移动到文件末尾。第二次循环再调用readlines()时,因为指针已经在末尾,会返回空列表,这时候访问[x]自然会触发索引越界错误——哪怕你把x改成0也一样,因为空列表没有索引0。
修复方案
这里提供几种实用的修改方式:
方式1:先读取所有行到变量,再遍历前10行
先一次性把文件内容读到列表里,之后循环访问这个列表的前10项,避免重复调用readlines()导致的指针问题:
# 推荐用with语句自动关闭文件,避免资源泄漏 with open("guide.txt", "r") as guide: all_lines = guide.readlines() for x in range(10): print(all_lines[x], end='') # end=''避免额外换行,因为每行本身带换行符
方式2:直接迭代文件对象,读取前10行(更高效)
文件对象本身是可迭代的,每次迭代返回一行,这种方式不用一次性加载全部2500行到内存,更适合大文件:
with open("guide.txt", "r") as guide: line_count = 0 for line in guide: if line_count >= 10: break print(line, end='') line_count += 1
方式3:用itertools.islice简化代码
如果想更简洁,可以用itertools.islice直接截取前10行:
from itertools import islice with open("guide.txt", "r") as guide: for line in islice(guide, 10): print(line, end='')
内容的提问来源于stack exchange,提问作者aquaticstarr
相关产品推荐
相关产品推荐

