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

如何复制含指定关键词行的前4行内容?行号操作遇阻

解决思路:用缓存捕获目标行的前3行内容

我完全懂你卡在这里的点——想提取包含特定关键词的行的前3行内容,但直接写line -3这种代码根本行不通:一来字符串没法和数字做减法,二来逐行读文件时,没法直接回溯行号去拿之前的内容。

核心的解决思路是用缓存保存最近读取的3行,这样每当遇到匹配关键词的行时,缓存里正好就是它的前3行内容,直接写入输出文件就行。

具体实现代码(Python)

def extract_previous_lines(input_path, output_path, target_keyword):
    # 初始化缓存列表,用来保存最近的3行
    recent_lines = []
    
    with open(input_path, 'r', encoding='utf-8') as in_file, \
         open(output_path, 'w', encoding='utf-8') as out_file:
        
        for current_line in in_file:
            # 检查当前行是否匹配关键词(对应你最初的find("keyword")==0逻辑)
            if current_line.startswith(target_keyword):
                # 将缓存中的前3行写入输出文件
                for line in recent_lines:
                    out_file.write(line)
                # 可选:如果需要区分不同匹配项的结果,可以添加分隔线
                # out_file.write('---\n')
            
            # 更新缓存:加入当前行,保持缓存最多3行
            recent_lines.append(current_line)
            if len(recent_lines) > 3:
                # 移除最早加入的一行,维持缓存长度
                recent_lines.pop(0)

代码逻辑说明

  1. 缓存维护:用列表recent_lines始终保存最近读取的3行内容,每读一行就加入列表,超过3行就把最旧的一行删掉,确保缓存里永远是当前行的前3行(或不足3行的已读内容)。
  2. 匹配触发写入:当遇到以目标关键词开头的行时,直接把缓存里的内容写入输出文件即可——这正好就是我们要的“匹配行的前3行”。
  3. 灵活调整匹配规则:如果你要匹配的是行中任意位置包含关键词,而不是开头,把current_line.startswith(target_keyword)改成target_keyword in current_line就行。

举个实际例子,假设输入文件内容是:

第一行
第二行
第三行
keyword 匹配行1
第四行
第五行
第六行
keyword 匹配行2

运行代码后,输出文件会包含:

第一行
第二行
第三行
第四行
第五行
第六行

内容的提问来源于stack exchange,提问作者user2803490

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:36:34