解析文本文档时,如何在for循环匹配if条件后打印多行内容?
实现匹配后打印多行内容的解决方案
我来帮你调整代码,实现匹配到目标行后打印多行内容的需求~你的原代码把文件内容转成带行号的字符串再处理,其实有点绕,直接遍历文件行并跟踪状态会更灵活高效,下面提供两种实用的实现方式:
方式一:匹配后打印固定行数的后续内容
如果你的需求是匹配到目标行后,打印当前行加上接下来的N行(比如3行),可以用这个写法:
# 自定义匹配后要打印的后续行数 lines_after_match = 3 with open('journal.0028.txt', 'r') as file_object: # 先把所有行读入列表,方便通过索引访问后续行 all_lines = file_object.readlines() for line_num, line in enumerate(all_lines, start=1): # start=1让行号从1开始更直观 # 检查当前行是否符合匹配条件 if "jrn." in line.lower() and "username" in line.lower(): print(f"【匹配行 {line_num}】: {line.strip()}") # 遍历后续指定行数,注意不要超出文件总长度 for i in range(1, lines_after_match + 1): current_idx = line_num - 1 + i # 因为enumerate从1开始,列表索引从0开始 if current_idx < len(all_lines): print(f"【后续行 {i}】: {all_lines[current_idx].strip()}") print("---匹配块结束---") # 可选,用于区分不同的匹配结果
方式二:匹配后打印直到遇到终止标记的内容
如果后续内容没有固定行数,而是需要打印到某个特定标记(比如空行、特定关键词)为止,可以用这种写法:
with open('journal.0028.txt', 'r') as file_object: all_lines = file_object.readlines() current_idx = 0 total_lines = len(all_lines) while current_idx < total_lines: current_line = all_lines[current_idx] # 检查是否匹配目标条件 if "jrn." in current_line.lower() and "username" in current_line.lower(): print(f"【匹配行 {current_idx+1}】: {current_line.strip()}") current_idx += 1 # 继续打印后续行,直到遇到空行或者"end"关键词(可根据需求修改终止条件) while current_idx < total_lines: next_line = all_lines[current_idx] if next_line.strip() == "" or "end" in next_line.lower(): break print(f"【后续行】: {next_line.strip()}") current_idx += 1 print("---匹配块结束---") else: current_idx += 1
原代码的小问题
你原来的代码把enumerate返回的(行号, 行内容)元组转成字符串存储,之后拆分处理时,只能拿到这个格式化后的字符串,很难关联到原文件的后续行,所以直接保留原行列表并通过索引访问会更灵活哦~
内容的提问来源于stack exchange,提问作者Christian Gentry
相关产品推荐
相关产品推荐

