首页 新闻 会员 周边

为什么f.readline()最后一行是空字符,并且一直readline都是空字符串,

0
[已关闭问题] 关闭于 2026-02-27 16:45
f.readline() 的返回值只有两种情况:
  1. 读到内容了:返回包含内容的字符串(即使这一行是空的,也会返回 '\n')。
  2. 读到文件末尾了 (EOF):返回一个空字符串 ''(长度为 0,连换行符都没有)

 

在末尾了,指针一直在末尾,所以一直readline(),一直是空字符串

readline():
  • 指针依然在文件最末尾。
  • 依然没东西读。
  • 返回:'' (一直是空字符串)。

 

推荐的写法 1:利用布尔值自动判断(最 Pythonic)

因为 '' 的布尔值是 False,而 '\n' 或其他内容的布尔值是 True
python
 
 
 
1withopen('test.txt','r')as f:2    line = f.readline()3while line:# 当 line 不是空字符串 '' 时,循环继续4print(repr(line))5        line = f.readline()6# 当 line 变成 '' 时,循环自动结束

✅ 推荐的写法 2:直接遍历文件对象(最佳实践)

其实我们很少手动用 readline() 写循环,Python 允许直接迭代文件对象,它会自动处理 EOF 和换行符,代码最简洁且效率最高。
python
 
 
 
1withopen('test.txt','r')as f:2for line in f:# 自动读取每一行,直到文件结束3# 注意:这里的 line 依然包含末尾的 \n4print(repr(line))
*Tesla*的主页 *Tesla* | 小虾三级 | 园豆:1526
提问于:2026-02-27 16:44
< >
分享
所有回答(1)
0

推荐的写法 1:利用布尔值自动判断(最 Pythonic)

因为 '' 的布尔值是 False,而 '\n' 或其他内容的布尔值是 True
python
 
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

*Tesla* | 园豆:1526 (小虾三级) | 2026-02-27 16:45
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册