f.readline() 的返回值只有两种情况:'\n')。''(长度为 0,连换行符都没有)
在末尾了,指针一直在末尾,所以一直readline(),一直是空字符串
readline():'' (一直是空字符串)。'' 的布尔值是 False,而 '\n' 或其他内容的布尔值是 True。1withopen('test.txt','r')as f:2 line = f.readline()3while line:# 当 line 不是空字符串 '' 时,循环继续4print(repr(line))5 line = f.readline()6# 当 line 变成 '' 时,循环自动结束
readline() 写循环,Python 允许直接迭代文件对象,它会自动处理 EOF 和换行符,代码最简洁且效率最高。1withopen('test.txt','r')as f:2for line in f:# 自动读取每一行,直到文件结束3# 注意:这里的 line 依然包含末尾的 \n4print(repr(line))
推荐的写法 1:利用布尔值自动判断(最 Pythonic)
'' 的布尔值是 False,而 '\n' 或其他内容的布尔值是 True。1with open('test.txt', 'r') as f: 2 line = f.readline() 3 while line: # 当 line 不是空字符串 '' 时,循环继续 4 print(repr(line)) 5 line = f.readline() 6 # 当 line 变成 '' 时,循环自动结束✅ 推荐的写法 2:直接遍历文件对象(最佳实践)
readline() 写循环,Python 允许直接迭代文件对象,它会自动处理 EOF 和保留换行符,代码最简洁且效率最高。1with open('test.txt', 'r') as f: 2 for line in f: # 自动读取每一行,直到文件结束 3 # 注意:这里的 line 依然包含末尾的 \n 4 print(repr(line))
除了readline(),open()打开的文件对象还有另一种方式__next__()可以一次向前读取一行,只不过__next__()在读取到文件结尾的时候不是返回空字符串,而是直接抛出迭代异常:
1 2 3 4 5 6 7 8 9 10 11 >>> f = open("a.txt") >>> f.__next__() 'first line\n' >>> f.__next__() 'second line\n' >>> f.__next__() 'third line\n' >>> f.__next__() Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration