python在两种模式之间打印,包括包含模式的行

时间:2018-06-28 08:14:05

标签: python

我需要打开一个日志文件,并打印出两种不同模式之间的特定行。

Beginning = pattern1
Ending = pattern2

这是我到目前为止所拥有的:

       def SeeIfDateTimeIsFound():
           mylist = []
           for line in input_data:
               if CTFBeginA in line:  # Or whatever test is needed
                   if re.search(stringA, line) and re.search(stringB, line):
                       mylist.append((line.strip()))
                       break
           for line in input_data:  # This keeps reading the file
                   if CTFEndinA in line.strip():
                       nextline = (next(input_data, '').strip())
                       if CTFEndin not in nextline:
                           break
                       else:
                           if re.search(stringA, line) and re.search(stringB, line):
                               mylist.append((line.strip()))
                           if re.search(stringA, line) and re.search(stringB, line):
                               mylist.append((line.strip()))
           return mylist

我想要做的基本上就是这个awk代码的等效内容:

awk '/Beginning/,/Ending/' logfile

我在上面的python代码中遇到的问题之一是,它仅捕获找到的包含Ending模式的第一行。如果有包含Ending的多行,我希望python代码抓取其中的每一个,并且仅在抓到最后一行时才停止抓取它们。

1 个答案:

答案 0 :(得分:0)

您可以在以下代码行中进行操作:

print_swt = 0
with open(logfile,'r') as f:
     for line in f:
         if Beginning in line:
            print_swt =1
         if Ending in line:
            print_swt = 0

         if print_swt:
            print line

注意:这可能不是最pythonic要做的事情。