Python脚本调用readline()无法打印文件首行,含if语句时异常求助
问题分析与解决办法
嘿,我之前也踩过这个坑!你的问题大概率是文件指针位置跑偏导致的,咱们一步步捋清楚:
为什么会出现空行?
你提到“输出第一部分符合预期”,我猜你在提问之前,可能已经用txt1.read()之类的操作把整个文件内容打印过了?比如脚本里可能有这样的代码:
print(txt1.read()) # 这里把文件全部内容读完了,文件指针直接跳到了文件末尾
当文件指针停在末尾时,再调用readline()自然读不到任何内容,只能输出空行。而你去掉if语句后,应该是直接在打开文件后就调用readline()——这时候指针在文件开头,自然能读到首行。
怎么修复?
给你几个简单的解决方案:
方案1:把文件指针移回开头
如果确实需要先读取整个文件,之后再读首行,用seek(0)把指针移回文件起始位置就行:
from sys import argv script, filename = argv print("I'm going to open the file.") txt1 = open(filename) # 先读取整个文件(示例) print("Full content of the file:") print(txt1.read()) answer = input("\nDo you want to read the first line again? ") if answer == 'yes': txt1.seek(0) # 关键:把指针移回文件开头 print(txt1.readline()) txt1.close() # 别忘了关闭文件!
方案2:用with语句自动管理文件
更规范的做法是用with语句,它会在代码块结束后自动关闭文件,而且每次打开文件都是从头开始读,完全不用操心指针位置:
from sys import argv script, filename = argv answer = input("Do you want to read the first line? ") if answer == 'yes': with open(filename) as txt1: # with会自动处理文件开闭 print(txt1.readline())
方案3:避免提前读取整个文件
如果你的“第一部分输出”不需要整个文件内容,那就直接在打开文件后,等用户确认再读取首行,这样指针一开始就在开头,根本不会有问题。
额外提醒
不管用哪种方式,都记得不要忘记关闭文件(用with的话可以省略这一步),不然可能会造成资源泄漏哦!
内容的提问来源于stack exchange,提问作者Spencer Hastings
相关产品推荐
相关产品推荐

