У меня есть большой файл журнала. Я хочу извлечь строки, содержащие java/javax/or/com
, а затем ./:
. Для каждой строки, подобной этой, я хочу извлечь некоторые из соответствующих строк, которые являются стеками стека, и начинается с at
. Например:Python копирование файлов с использованием regex
Line1: java.line.something.somethingexception
line 2: at something something
line 3: at something something
line 4: at something something
line 5-20:Junk I don't want to extract.
line 21: javax.line.something.somethingexception
line 22: at something something
line 23: at something something
line 24: at something something
и так далее ...
Здесь я хочу линии 1-4, а затем снова линии 21-24 копирования. Пока мой код собирает строку, содержащую ключевые слова, но я не могу понять, как написать конкретное количество строк после этого, пропустить несколько строк и начать писать снова. Эти строки, которые начинаются с, являются случайными, т.е. они может быть 100 строк, или они могут быть 250 строк, поэтому нет шаблона.
Вот мой код:
import re
import sys
from itertools import islice
file = open(sys.argv[1], "r")
file1 = open(sys.argv[2],"w")
i = 0
for line in file:
if re.search(r'[java|javax|org|com]+?[\.|:]+?', line, re.I) and not (re.search(r'at\s', line, re.I) or re.search(r'mdcloginid:|webcontainer|c\.h\.i\.h\.p\.u\.e|threadPoolTaskExecutor|caused\sby', line, re.I)):
file1.write(line)
Этот код только извлекает строки, содержащие ключевые слова, но я застрял на том, как сделать следующую часть, т.е. скопировать следующие строки, содержащие в и записать их в новый файл, остановка, где «at» заканчивается. Найдите следующую строку с ключевыми словами и повторите одно и то же действие.