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

时间:2011-10-14 23:31:08

标签: python

我正在尝试将我的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 个答案:

答案 0 :(得分: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')