如何在文本文件中查找字符串并打印前后行

1 投票
1 回答
16455 浏览
提问于 2025-04-17 04:21

我正在尝试把我的shell脚本转换成Python代码,但在这个操作上遇到了困难。

我有一个进程会输出一个文本文件,文件的内容大致是这样的:

Running Operation kdasdakdnaskdaksdma

 (error if present) error: kdmakmdasmdaksom

这个文件可能有多行内容,包含操作和错误信息(如果有的话,没错误的话下一行就会是另一个操作);每个块后面总是会有一个换行符。

我想扫描这个文件,找到包含“error:”的那一行,然后读取导致错误的操作和错误的详细信息,这样我就可以把它从文本文件中提取出来,保存到一个错误日志文件里。

到目前为止,我可以找到包含“error:”的行,使用这段简单的代码,但我还不知道怎么打印那些不一定包含错误信息的行,而是打印“error:”所在行之前和之后的行。

用awk或grep来做这件事很简单,但用Python我不太确定该怎么做;这是我目前的代码,它能打印出包含错误的那一行,但只打印这一行,而我希望能控制打印前后几行。

import re

fh = open('~/logs_output.txt')

for line in fh:
    if "error:" in line:
        print line

我试着查看Python中的RE模块和字符串模块,但到现在为止还没有找到任何能让我像用awk那样,查找特定字符串并控制打印的东西,一旦完成就停止打印。

有没有人能给我指个方向,帮我解决这个问题?谢谢!

1 个回答

1
import re


ss = '''qhvfgbhgozr
yytuuuyuyuuuyuyuuyy
jhfg tryy error  jjfkhdjhfjh ttrtr
aaaeeedddeedaeaeeaeeea
jhzdgcoiua zfaozifh cohfgdyg fuo'''

regx = re.compile('^(.*)\r?\n(.*?error.*)\r?\n(.*)', re.MULTILINE)

print regx.search(ss).groups()
('yytuuuyuyuuuyuyuuyy', 'jhfg tryy error  jjfkhdjhfjh ttrtr', 'aaaeeedddeedaeaeeaeeea')

结果

撰写回答