如何按指定行号读取文件内容?代码执行异常求助
解决方法:按指定行号读取文件内容
嘿,我一眼就看出问题出在哪啦!你代码里用的readlines(fixchoice),这个方法的参数根本不是行号——它是用来指定读取的字节数上限的!也就是说,你输入的数字其实是告诉程序“最多读这么多字节的内容”,而不是“读第X行”,这就是为啥不管输啥数字,输出的内容都差不多。
下面给你两种靠谱的解决办法,按需选择就行:
方法1:一次性读取所有行(适合小文件)
如果你的文件不大,直接把所有行读到列表里,然后用索引取对应行就行——注意列表索引是从0开始的,所以输入的行号要减1哦:
def option_a(): fixchoice = int(input("Enter line number: ")) # 用with语句自动关闭文件,避免资源浪费 with open("firesideFixtures.txt", "r") as file: all_lines = file.readlines() # 先检查输入的行号是否有效 if 1 <= fixchoice <= len(all_lines): # strip()用来去掉行尾的换行符,输出更整洁 print(all_lines[fixchoice - 1].strip()) else: print("哎呀,这个行号不存在!") option_a()
方法2:逐行遍历(适合大文件)
如果文件特别大,一次性读入所有行会占用太多内存,那就用enumerate逐行遍历,找到目标行就停止:
def option_a(): fixchoice = int(input("Enter line number: ")) with open("firesideFixtures.txt", "r") as file: # enumerate的start参数设为1,让行号从1开始计数,和用户输入对应 for line_number, line_content in enumerate(file, start=1): if line_number == fixchoice: print(line_content.strip()) break else: # 如果循环正常结束(没触发break),说明没找到对应行 print("这个行号不在文件里哦!") option_a()
再给你补个知识点:readlines()不带参数的时候,才会返回文件所有行的列表;带参数的话,它会读取到指定字节数的位置,然后返回截止到那里的所有完整行——这就是你之前代码出错的核心原因啦!
内容的提问来源于stack exchange,提问作者Mert
相关产品推荐
相关产品推荐

