@Iceforest

По какому алгоритму распарсить файл, чтобы подсчитать результаты в каждом туре?

есть файл txt, в нем записаны туры. В каждом туре разное кол-во строк, но есть общие параметры это Tour и строка winner is . Также между турами есть пробел. По факту, мне нужно создать список из туров, для подсчета очков в каждом туре и выбора победителя. Алгоритм подсчета очков написан, а вот как распарсить, не понимаю
Попробовал вот так, но получается какой-то дикий лист и общего принципа для for не вижу(
with open(file_name, "r", encoding="utf-8") as file:
    list=[]
    list2=[]
    for line in file:
        try:
            if 'Tour' in line:
                number_tour = line.split()
                number_tour = number_tour[2]
                print('Tour ' + number_tour)
                list.append(number_tour)
            else:
                date_str = line.split()
                name = date_str[0]
                print(name)
                result = date_str[1]
                print(result)
                list2.append(name)
                list2.append(result)
                print(list2)
                print(list)
        except IndexError:
            print('пустая строка')
list3=[]
for element in list2:
    if element == 'winner':
        break
    else:
        list3.append(element)
print(list3) # первый тур


файл txt выглядит так
### Tour 1
Антон 1/6/1/--327-18812382
Елена 3532X332/3/62--62X
Роман 725518X--8/--543152
Татьяна 8/--35-47/371/518-4/
Ринат 4-3/7/3/8/X711627-5
winner is .........

### Tour 2
Татьяна 42X--3/4/2-8271171/
Роман 811/X--3/XX171/43
Ринат -263X815/5/27-----6
winner is .........
  • Вопрос задан
  • 86 просмотров
Решения вопроса 1
SoreMix
@SoreMix Куратор тега Python
yellow
tours = {}

with open('test.txt', 'r', encoding='utf-8') as f:
   for line in f.readlines():
      if '### Tour' in line:
         tour_number = line.strip().split('### Tour ')[-1]
         
         tours[tour_number] = {}

      if '/' in line:
         user, score = line.strip().split(' ')
         tours[tour_number][user] = score

print(tours)
# {'1': {'Антон': '1/6/1/--327-18812382', 'Елена': '3532X332/3/62--62X', 'Роман': '725518X--8/--543152', 'Татьяна': '8/--35-47/371/518-4/', 'Ринат': '4-3/7/3/8/X711627-5'}, '2': {'Татьяна': '42X--3/4/2-8271171/', 'Роман': '811/X--3/XX171/43', 'Ринат': '-263X815/5/27-----6'}}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Wispik
@Wispik
date_str = line.split()
# date_str[0] - имя
# date_str[1] - очки
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы