У меня есть текстовый файл, в котором есть строки, представляющие некоторые наборы данных. Сам файл довольно длинный, но он содержит определенные разделы следующего формата:
Series_Name INFO Number of teams : n1
| Team | # | wins |
| TeamName1 | x | y |
.
.
.
| TeamNamen1 | numn | numn |
Some Irrelevant lines
Series_Name2 INFO Number of teams : n1
| Team | # | wins |
| TeamName1 | num1 | num2 |
.
где каждый раздел имеет заголовок, который начинается с Series_Name. Каждое Series_Name отличается. Строка с заголовком также включает количество команд в этой серии, n1. Следующая строка заголовка представляет собой набор строк, представляющих таблицу данных. Для каждой серии в таблице есть n1 + 1 ряд, где в каждой строке указано имя отдельной команды и соответствующая статистика.
Я пытался реализовать функцию, которая позволит пользователю искать имя команды, а затем распечатывать строку в таблице, связанной с этой командой. Тем не менее, определенные названия команд отображаются в нескольких сериях.
Чтобы решить эту проблему, в настоящее время я пытаюсь написать свой код, чтобы пользователь мог сначала найти строку заголовка с названием серии, а затем распечатать только следующие n1 + 1 строки, которые представляют данные, связанные с серией.
Вот что я придумала до сих пор:
import re
print
fname = raw_input("Enter filename: ")
seriesname = raw_input("Enter series: ")
def findcounter(fname, seriesname):
logfile = open(fname, "r")
pat = 'INFO Number of teams :'
for line in logfile:
if seriesname in line:
if pat in line:
s=line
pattern = re.compile(r"""(?P<name>.*?) #starting name
\s*INFO #whitespace and success
\s*Number\s*of\s*teams #whitespace and strings
\s*\:\s*(?P<n1>.*)""",re.VERBOSE)
match = pattern.match(s)
name = match.group("name")
n1 = int(match.group("n1"))
print name + " has " + str(n1) + " teams"
lcount = 0
for line in logfile:
if line.startswith(name):
if pat in line:
while lcount <= n1:
s.append(line)
lcount += 1
return result
Первая часть моего кода работает; он соответствует строке заголовка, которую ищет человек, анализирует строку и затем выводит количество команд в этой серии. Поскольку строка заголовка в основном говорит мне, сколько строк в таблице, я подумал, что смогу использовать эту информацию для создания цикла, который будет продолжать печатать каждую строку, пока счетчик набора не достигнет n1. Но я попытался запустить его, и я понимаю, что способ, которым я его настроил, пока не верен.
Итак, вот мой вопрос: как вы возвращаете количество строк после совпавшей строки, если дано количество нужных строк, следующих за совпадением? Я новичок в программировании, и я прошу прощения, если этот вопрос кажется глупым. Я работал над этим довольно усердно, без удачи, и был бы признателен за любую помощь.