Python如何查找文本文件指定行及匹配字符串行的前后行
Python查找匹配行及前后相邻行实现方案
首先回答基础问题:已知行号可以找到文本文件的对应行
两种常用实现方式适配不同场景:
- 小文件场景:直接读取所有行存入列表,通过下标取值即可(列表从0开始计数,行号需要减1)
with open("songs.txt", "r", encoding="utf-8") as f: lines = f.readlines() # 取第10行内容 target_line = lines[9] - 大文件场景:遍历计数匹配行号,无需加载整个文件到内存,占用资源更低
target_line_num = 10 current_num = 0 target_line = "" with open("songs.txt", "r", encoding="utf-8") as f: for line in f: current_num += 1 if current_num == target_line_num: target_line = line break
查找匹配字符串行并输出前后行实现代码
你原本的代码存在两处逻辑错误:
- 未缓存前一行内容,也没有在找到匹配行后主动读取下一行
- 未匹配提示放在了循环内部,每遍历一行不匹配就会打印一次提示,不符合预期
修正后可直接运行的完整代码如下:
word = "some string" prev_line = "" # 缓存前一行内容 found = False # 用with语法管理文件句柄,自动释放资源无需手动close with open("songs.txt", "r", encoding="utf-8") as f: for line in f: if word in line: found = True # 打印前一行,处理匹配行是第一行的边界情况 if prev_line: print(f"前一行:{prev_line.strip()}") else: print("前一行:无(当前是文件第一行)") # 打印匹配到的当前行 print(f"匹配行:{line.strip()}") # 读取下一行,处理匹配行是最后一行的边界情况 try: next_line = next(f) print(f"后一行:{next_line.strip()}") except StopIteration: print("后一行:无(当前是文件最后一行)") # 找到目标后直接终止遍历,节省资源 break # 未匹配时更新前一行缓存 prev_line = line if not found: print(f"{word} not found")
内容的提问来源于stack exchange,提问作者Vakare Zilinskaite
相关产品推荐
相关产品推荐

