如何实现输入行号读取文本文件对应行?代码运行异常求助
问题分析与解决
你的代码存在两个核心问题:
input()获取的是字符串类型,直接传入readlines()会触发类型错误;readlines()的参数是读取的字节数,并非你想要指定的行号,逻辑完全不符合需求。
下面是两种正确的实现方案:
方案一:一次性读取所有行(适合小文件)
# 将输入的字符串转为整数 line_num = int(input('请输入要读取的行号: ')) # 使用with语句自动管理文件,无需手动调用close with open('newfile.txt', 'r', encoding='utf-8') as file: lines = file.readlines() # 检查输入行号是否在有效范围内 if 1 <= line_num <= len(lines): # 用户习惯从1开始数行,而列表索引从0开始,因此需要减1 print(lines[line_num - 1].strip()) # strip()用于去除行尾的换行符 else: print('输入的行号超出文件行数范围')
方案二:逐行读取(适合大文件,节省内存)
如果你的文件体积较大,一次性读取所有行会占用过多内存,推荐使用逐行遍历的方式:
line_num = int(input('请输入要读取的行号: ')) current_line = 0 with open('newfile.txt', 'r', encoding='utf-8') as file: for line in file: current_line += 1 if current_line == line_num: print(line.strip()) break else: # 循环正常结束(未触发break),说明找不到对应行号 print('输入的行号超出文件行数范围')
关键注意事项
- 必须用
int()将输入的字符串转为整数,否则会触发类型错误; - 使用
with语句操作文件是Python的最佳实践,能自动处理文件关闭,避免资源泄漏; - 增加行号范围检查,可防止用户输入的数字超过文件实际行数导致索引越界报错。
内容的提问来源于stack exchange,提问作者Programmer235
相关产品推荐
相关产品推荐

