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

Python 如何在文本文件中查找字符串并在前后打印行,python,Python,我正在尝试将shell脚本转换为python代码,但在尝试此操作时遇到了问题 我有一个输出文本文件的过程,该文件有如下部分: Running Operation kdasdakdnaskdaksdma (error if present) error: kdmakmdasmdaksom 此文件可能有多行用于操作和错误(如果存在,否则下一行将只有另一个操作);每个区块后始终有一个crlf 我试图扫描该文件以找到包含“error:”的行,然后读取导致错误的操作和错误的详细信息,以便从文本文件中

我正在尝试将shell脚本转换为python代码,但在尝试此操作时遇到了问题

我有一个输出文本文件的过程,该文件有如下部分:

Running Operation kdasdakdnaskdaksdma

 (error if present) error: kdmakmdasmdaksom
此文件可能有多行用于操作和错误(如果存在,否则下一行将只有另一个操作);每个区块后始终有一个crlf

我试图扫描该文件以找到包含“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那样执行操作的方法,例如,在awk中,可以查找某个特定字符串的匹配项并打开打印,然后在完成后关闭打印

有人能给我指出解决这个问题的正确方向吗?谢谢

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')
结果

('yytuuuyuyuuuyuyuuyy', 'jhfg tryy error  jjfkhdjhfjh ttrtr', 'aaaeeedddeedaeaeeaeeea')

非常感谢eyquem!你能给我一些关于你写的RE的意思的提示吗?因此,我可以修改它,以防我需要的不仅仅是之前或之后的第一行(在某些情况下,错误有多行,每行都有一个CRLF,因此使用此RE,我只得到第一行。非常感谢!!!!非常感谢eyquem!您能给我一些关于您编写的RE含义的提示吗?以便我可以修改它,以防我需要的不仅仅是之前或之后的第一行(在某些情况下,错误有多行,每行都有一个CRLF,因此使用此RE,我只得到第一行。非常感谢!!!!您应该能够将RE用于您的目的。此外,谷歌“python awk”可能会对您有所帮助。您应该能够将RE用于您的目的。此外,谷歌“python awk”提出可能对你有帮助的建议。