Допустим, у меня есть входной текстовый файл следующего формата:
Section1 Heading Number of lines: n1
Line 1
Line 2
...
Line n1
Maybe some irrelevant lines
Section2 Heading Number of lines: n2
Line 1
Line 2
...
Line n2
где определенные разделы файла начинаются со строки заголовка, которая указывает, сколько строк в этом разделе. Заголовок каждого раздела имеет свое имя.
Я написал регулярное выражение, которое будет соответствовать строке заголовка на основе имени заголовка, которое пользователь ищет для каждого раздела, анализирует его, а затем возвращает число n1 / n2 / etc, которое говорит мне, сколько строк в разделе , Я пытался использовать цикл for-in для чтения каждой строки, пока счетчик не достигнет n1, но до сих пор это не сработало.
Вот мой вопрос: как вернуть только определенное количество строк, следующих за совпавшей строкой, если это число указано в совпадении и отличается для каждого раздела? Я новичок в программировании, и я ценю любую помощь.
РЕДАКТИРОВАТЬ: Хорошо, вот соответствующий код, который у меня есть:
import re
print
fname = raw_input("Enter filename: ")
toolname = raw_input("Enter toolname: ")
def findcounter(fname, toolname):
logfile = open(fname, "r")
pat = 'SUCCESS Number of lines :'
#headers all have that format
for line in logfile:
if toolname in line:
if pat in line:
s=line
pattern = re.compile(r"""(?P<name>.*?) #starting name
\s*SUCCESS #whitespace and success
\s*Number\s*of\s*lines #whitespace and strings
\s*\:\s*(?P<n1>.*)""",re.VERBOSE)
match = pattern.match(s)
name = match.group("name")
n1 = int(match.group("n1"))
#after matching line, I attempt to loop through the next n1 lines
lcount = 0
for line in logfile:
if line == match:
while lcount <= n1:
match.append(line)
lcount += 1
return result
Файл сам по себе довольно длинный, и между интересующими меня разделами есть много не относящихся к делу строк, которые меня интересуют. Я не слишком уверен в том, как задать печать строк непосредственно после совпавшей строки.