Python实现打印匹配筛选条件的行及其前X行的方法
解决Python打印匹配行及其前X行的问题
嘿,作为Python新手能自己写出遍历文件并输出匹配行的脚本已经很棒啦!要实现打印匹配行的前X行,核心思路是用一个“滑动窗口”保存最近的X行,当找到符合条件的行时,先把窗口里的内容打出来,再打印当前匹配行就行。
我给你写个实用的示例代码,结合高效的数据结构来处理,就算1万行文件也毫无压力:
from collections import deque # 配置参数:改成你需要的X值和筛选条件 X = 3 # 要打印的前X行数量 def filter_condition(line): # 这里替换成你的自定义筛选规则,比如找包含"错误"的行 return "错误" in line.strip() # 处理文件 with open("your_file.txt", "r", encoding="utf-8") as file: # 用deque做滑动窗口,maxlen设为X,自动维护最近X行 previous_lines = deque(maxlen=X) for current_line in file: # 先检查当前行是否符合条件 if filter_condition(current_line): # 打印前X行(如果有的话) for line in previous_lines: print(line, end="") # 保留原换行,避免重复空行 # 打印当前匹配行 print(current_line, end="") # 可选:加个分隔线,方便区分不同的匹配结果 print("=" * 60) # 将当前行加入滑动窗口,超过X行时自动移除最早的一行 previous_lines.append(current_line)
代码逻辑解释:
- deque的作用:Python标准库的
collections.deque是专门做队列的结构,设置maxlen=X后,当新元素加入导致长度超过X时,会自动删掉最左边的旧元素,完美实现“只保留最近X行”的需求,比用列表手动pop(0)高效多了。 - 筛选条件:把
filter_condition函数改成你自己的判断逻辑就行——比如检查是否包含特定关键词、满足数值条件等等,灵活得很。 - 逐行处理:不需要把整个1万行文件读进内存,逐行遍历既省内存又快,完全适合你的场景。
小细节提示:
- 如果匹配的行在文件开头(前面不足X行),代码会自动只打印现有的前面行,不会报错;
- 记得把
your_file.txt改成你实际的文件名,编码utf-8如果不对(比如GBK)也可以调整; - 要是想同时打印后X行,逻辑类似,只要维护一个“未来行”的队列就行,不过你现在需要的是前X行,上面的代码就够啦。
内容的提问来源于stack exchange,提问作者Symbal
相关产品推荐
相关产品推荐

