如何复制含指定关键词行的前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)
代码逻辑说明
- 缓存维护:用列表
recent_lines始终保存最近读取的3行内容,每读一行就加入列表,超过3行就把最旧的一行删掉,确保缓存里永远是当前行的前3行(或不足3行的已读内容)。 - 匹配触发写入:当遇到以目标关键词开头的行时,直接把缓存里的内容写入输出文件即可——这正好就是我们要的“匹配行的前3行”。
- 灵活调整匹配规则:如果你要匹配的是行中任意位置包含关键词,而不是开头,把
current_line.startswith(target_keyword)改成target_keyword in current_line就行。
举个实际例子,假设输入文件内容是:
第一行 第二行 第三行 keyword 匹配行1 第四行 第五行 第六行 keyword 匹配行2
运行代码后,输出文件会包含:
第一行 第二行 第三行 第四行 第五行 第六行
内容的提问来源于stack exchange,提问作者user2803490
相关产品推荐
相关产品推荐

