为何Python的readline代码未输出预期结果?求技术解答
Python readline代码丢失行的原因解析
问题场景
你写出了两段Python文件读取代码,第一段无法输出预期结果:
f=open('Python_practice/Sample1.txt','r') while f.readline() != '': print(f.readline(),end = '') f.close()
实际输出缺失第1行和第3行:
How are you ?
What about you ?
而第二段代码能得到完整的预期输出:
f=open('Python_practice/Sample1.txt','r') while True: data = f.readline() if data == '': break else: print(data,end = '') f.close()
预期输出:
Hello!
How are you ?
I am fine, thanks.
What about you ?
原因分析
问题的核心是第一段代码在单次循环中调用了两次f.readline():
while条件里的f.readline()会读取一行内容,用来判断是否继续循环,但这次读取的内容没有被保存或打印。- 紧接着
print里的f.readline()会读取下一行,然后打印出来。
文件对象的读取指针是单向移动的,每调用一次readline(),指针就会向后移动一行。所以第一段代码的执行流程是:
- 读取第1行→判断非空,进入循环→打印第2行
- 读取第3行→判断非空,进入循环→打印第4行
- 读取第5行(文件末尾,为空)→退出循环
这样第1行和第3行只被用于循环判断,根本没机会被打印,所以就出现了行丢失的情况。
而第二段代码的逻辑是每一行只读取一次:把readline()的结果存入data变量,后续的判断和打印都基于这个变量,不会重复读取,所以所有行都能被正常输出。
内容的提问来源于stack exchange,提问作者Aditya
相关产品推荐
相关产品推荐

