读取文本文件指定索引行触发IndexError的原因及修复方案
错误原因
每次调用f.readlines()时,文件指针会移动到文件末尾。第一次循环执行f.readlines()会读取文件所有行,此时文件指针已经到了末尾;后续循环再次调用f.readlines()时,返回的是空列表,这时访问空列表的索引i就会触发IndexError。另外,就算第一次调用时,若目标索引i大于文件实际行数,也会触发该错误,但这里核心问题是重复调用readlines()导致后续返回空列表。
修复方案
有两种常用修复思路,根据文件大小选择:
方案1:一次性读取所有行(适合小文件)
先把文件所有行读入内存,再按需访问指定索引,同时增加索引有效性判断避免行数不足的情况:
target_lines = [11, 22, 50] with open('erste_seite_test2.txt') as f: all_lines = f.readlines() for idx in target_lines: if idx < len(all_lines): print(all_lines[idx].strip()) else: print(f"索引 {idx} 超出文件总行数")
用with语句可以自动关闭文件,避免资源泄漏。
方案2:逐行遍历匹配(适合大文件)
如果文件很大,一次性读入内存占用过高,可以逐行遍历并记录行号,匹配到目标索引时处理,匹配完成后提前退出:
target_lines = {11, 22, 50} # 用集合提升查找效率 with open('erste_seite_test2.txt') as f: for line_num, line in enumerate(f): if line_num in target_lines: print(line.strip()) target_lines.remove(line_num) if not target_lines: break # 所有目标行都找到,提前结束循环
内容的提问来源于stack exchange,提问作者archviz_fan
相关产品推荐
相关产品推荐

