You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 15:06:07