Python中在for循环内逐行读取文件的问题及正确输出需求
问题分析与解决
你的代码问题出在每次循环都重新打开文件,导致每次readline()都会从文件开头读取第一行,所以输出重复。下面是几种修复方案:
方案1:直接遍历已读取的行列表
既然已经用readlines()把所有行读到lines里了,直接循环这个列表就行,简单高效:
file1 = open('users.txt', 'r') lines = file1.readlines() file1.close() # 记得关闭文件 for line in lines: parts = line.strip().split(':') print(parts[0]) print(parts[1])
方案2:逐行读取文件(更推荐)
不需要提前读取所有行,文件对象本身支持迭代,会自动逐行读取,还能避免占用过多内存:
with open('users.txt', 'r') as file1: # with语句会自动关闭文件,更安全 for line in file1: parts = line.strip().split(':') print(parts[0]) print(parts[1])
方案3:保留原循环结构的修复(不推荐,仅作演示)
如果一定要用原有的for i in range(len(lines))结构,不要在循环内重复打开文件,而是在循环外打开后逐行读取:
file1 = open('users.txt', 'r') lines = file1.readlines() file1.seek(0) # 把文件指针移回开头 for i in range(len(lines)): line = file1.readline() parts = line.strip().split(':') print(parts[0]) print(parts[1]) file1.close()
额外提示:
- 原代码里的变量名
lina是笔误,应该是line - 尽量使用
with语句操作文件,它会在代码块结束后自动关闭文件,避免资源泄漏
内容的提问来源于stack exchange,提问作者Ali Emad Eldin
相关产品推荐
相关产品推荐

