为何两段Python代码片段单独运行正常,连用时第二个无输出?
为什么两段Python代码单独运行正常,放一起就没输出?
嘿,这个问题其实是文件读取指针在搞鬼!我来给你掰扯清楚:
当你打开一个文件后,系统会维护一个“指针”,用来标记当前读取到文件的哪个位置。每次调用read()、readline()这类读取方法时,指针都会跟着移动——比如用read()会直接把指针移到文件末尾,readline()会把指针移到下一行的开头。
你看你的两段代码:
- 片段1里的
file.read().splitlines()会一次性把整个文件的内容读完,这时候指针已经跑到文件最后面了。 - 接着运行片段2的
file.readline(),指针已经在末尾了,自然读不到任何内容,所以没输出。
反过来,如果先运行片段2再运行片段1,片段1会从指针当前位置(第一行末尾)读到文件结束,虽然能读到内容,但也不是你想要的完整结果对吧?
解决办法有这几种:
1. 把指针移回文件开头
在两次读取之间,用seek(0)方法把指针重置到文件起始位置,这样第二次读取就能从头开始了:
file = open("text.txt", "r") leng = len(file.read().splitlines()) file.seek(0) # 关键:把指针移回开头 print(file.readline()) file.close()
2. 重新打开文件
每次读取操作都单独打开和关闭文件,因为新打开的文件默认指针就在开头:
# 第一段代码 file = open("text.txt", "r") leng = len(file.read().splitlines()) file.close() # 第二段代码,重新打开文件 file = open("text.txt", "r") print(file.readline()) file.close()
3. 用with语句管理文件(推荐)
with语句会自动帮你关闭文件,代码更简洁安全,而且每次用with打开文件,指针都是从头开始的:
with open("text.txt", "r") as file: leng = len(file.read().splitlines()) with open("text.txt", "r") as file: print(file.readline())
简单来说,就是记住:文件读取指针不会自动重置,读完一次后想要再读,要么把指针移回去,要么重新打开文件~
内容的提问来源于stack exchange,提问作者user11860709
相关产品推荐
相关产品推荐

