使用for循环读取文本文件时报list index out of range错误,求解决
问题分析与解决
错误原因
你的代码存在两个核心问题:
readlines()调用逻辑错误:每次调用example.readlines()都会把文件指针移到文件末尾。第一次在range()里调用时,已经读取完所有行,指针到了末尾;循环里再调用example.readlines()会返回空列表,此时用[number]索引必然触发list index out of range错误。range()参数类型错误:range()需要传入整数,但example.readlines()返回的是字符串列表,这行代码本身逻辑就不成立,只是文件指针移动的问题先触发了索引错误。
修正后的代码
推荐几种简洁且正确的写法:
写法1:先读取所有行到变量再遍历
example_list = [] with open("/path/data.txt") as example: lines = example.readlines() # 一次性读取所有行到变量,避免重复移动指针 for line in lines: example_list.append(line.strip()) # strip()可选,用于去除每行末尾的换行符和空格 print(example_list)
写法2:列表推导式(更简洁)
with open("/path/data.txt") as example: example_list = [line.strip() for line in example.readlines()] print(example_list)
写法3:直接遍历文件对象(内存更高效)
如果文件体积较大,不建议一次性读取所有行,直接遍历文件对象即可逐行读取:
example_list = [] with open("/path/data.txt") as example: for line in example: # 文件对象本身支持迭代,逐行读取 example_list.append(line.strip()) print(example_list)
为什么手动输入索引能运行?
手动输入索引时,你每次都是重新运行代码,文件句柄会重新打开,指针始终处于文件开头,所以example.readlines()每次都能返回完整的行列表。而循环里是在同一个文件句柄下操作,指针移动后无法自动回到开头(除非手动调用example.seek(0),但完全没必要这么做)。
内容的提问来源于stack exchange,提问作者NewJoiner121
相关产品推荐
相关产品推荐

