Python

Создаю программу. Нужно считать данные

Есть файл - с произвольным названием которое вводит пользователь. Его название сохраняется в переменную fileName. Далее появляется файл примерно такого содержания:
[Event "Casual Rapid game"]
[Site "yxpC0GIN"]
[Date "2021.11.29"]
[White "Roman8274518"]
[Black "Sliver777"]
[Result "0-1"]
[UTCDate "2021.11.29"]
[UTCTime "16:13:59"]
[WhiteElo "2227"]
[BlackElo "2294"]
[Variant "Standard"]
[TimeControl "600+5"]
[ECO "B03"]
[Termination "Normal"]

1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. d4 d6 5. exd6 cxd6 6. Be3 g6 7. Nc3 Bg7 8. h3 O-O 9. Nf3 Nc6 10. Rc1 d5 11. b3 e5 12. dxe5 d4 13. Nxd4 Nxe5 14. Be2 f5 15. f4 Qh4+ 16. Kf1 Ng4 17. Bxg4 fxg4 18. Qe1 g3 19. Nf3 Qf6 20. Ne4 Qc6 21. Nxg3 Bd7 22. Kf2 Rae8 23. Qd2 g5 24. Nxg5 Qh6 25. c5 Qxg5 26. cxb6 Rxe3 27. Qxe3 Bd4 28. Ke2 Qb5+ 29. Qd3 Re8+ 30. Kd2 Qa5+ 31. Kd1 Qxb6 32. Qc4+ Be6 33. Qd3 Rd8 34. Kc2 Bf7 35. f5 Be5 36. Qe4 Qf2+ 37. Ne2 Bf6 38. Rhf1 Qc5+ 39. Kb1 Qa3 40. Qc2 Bd5 41. Nc3 Rc8 42. Rfd1 Rxc3 43. Qxc3 Be4+ 44. Ka1 Bxc3+ 45. Rxc3 Qb4 46. Rc8+ Kf7 47. Rd7+ Kf6 48. Rf8+ Qxf8 0-1


это - шахматная партия, и мне нужно считать: во первых данные в квадратных скобках отдельно, чтобы получить в переменные что white = Roman8274518 а переменная ECO = B03. а также отдельно всю партию, чтобы можно было отделить первый ход: 1. e4 Nf6. Как такое сделать?
1)
По-моему Вы ошибаетесь насчет того, что левые части строк, должны стать названиями переменных. Названия переменных - это внутрення кухня программы и с внешним миром она не должна сообщаться. Для такого общения с внешним миром надо применять eval(), что небезопасно и не нужно.

По-моему из верхней части надо делать словарь вида:
D = { 'White': "Roman8274518", ..'ECO': "B03", ..}
А затем в программе по ключам 'White', 'ECO' находить соответствующие значения.

2) Для обработки можно использовать методы строк и регулярные выражения, а чтобы понять как, желательно чтобы Вы уточнили какие отклонения от приведенного примера могут быть в исходном файле, и какой вид надо получить на выходе.

Вот по-моему такой вариант вроде может подойти
https://pastebin.com/JQ8Ycp07

"""
входной файл f.txt
---------
[Event "Casual Rapid game"]
[Site "yxpC0GIN"]
[Date "2021.11.29"]
[White "Roman8274518"]
[Black "Sliver777"]
[Result "0-1"]
[UTCDate "2021.11.29"]
[UTCTime "16:13:59"]
[WhiteElo "2227"]
[BlackElo "2294"]
[Variant "Standard"]
[TimeControl "600+5"]
[ECO "B03"]
[Termination "Normal"]

1. e4 Nf6 2. e5 Nd5 3. c4 Nb6 4. d4 d6 5. exd6 cxd6 6. Be3 g6 7. Nc3 Bg7 8. h3 O-O 9. Nf3 Nc6 10. Rc1 d5 11. b3 e5 12. dxe5 d4 13. Nxd4 Nxe5 14. Be2 f5 15. f4 Qh4+ 16. Kf1 Ng4 17. Bxg4 fxg4 18. Qe1 g3 19. Nf3 Qf6 20. Ne4 Qc6 21. Nxg3 Bd7 22. Kf2 Rae8 23. Qd2 g5 24. Nxg5 Qh6 25. c5 Qxg5 26. cxb6 Rxe3 27. Qxe3 Bd4 28. Ke2 Qb5+ 29. Qd3 Re8+ 30. Kd2 Qa5+ 31. Kd1 Qxb6 32. Qc4+ Be6 33. Qd3 Rd8 34. Kc2 Bf7 35. f5 Be5 36. Qe4 Qf2+ 37. Ne2 Bf6 38. Rhf1 Qc5+ 39. Kb1 Qa3 40. Qc2 Bd5 41. Nc3 Rc8 42. Rfd1 Rxc3 43. Qxc3 Be4+ 44. Ka1 Bxc3+ 45. Rxc3 Qb4 46. Rc8+ Kf7 47. Rd7+ Kf6 48. Rf8+ Qxf8 0-1
---------
"""

import re
D = dict()
with open('f.txt') as f:
~for s in f:
~~s = s.strip().lstrip('[').rstrip(']')
~~if s:
~~~if s[0].isalpha():
~~~~a = s.find(' ') + 1
~~~~b = s.find('"') + 1
~~~~c = s.rfind('"')
~~~~D[s[:a]] = s[b:c]
~~~elif s[0] is '1':
~~~~pattern = '(\s)(\d+\.\s)'
~~~~repl = r'$$$\2'
~~~~moves = re.sub(pattern, repl, s).split('$$$')
~~~~moves = [a.split('. ') for a in moves]
~~~~moves = dict((int(a[0]),a[1].split()) for a in moves)

print(D)
print(moves)

"""
на выходе
-------------
==================
{'Event ': 'Casual Rapid game', 'Site ': 'yxpC0GIN', 'Date ': '2021.11.29', 'White ': 'Roman8274518', 'Black ': 'Sliver777', 'Result ': '0-1', 'UTCDate ': '2021.11.29', 'UTCTime ': '16:13:59', 'WhiteElo ': '2227', 'BlackElo ': '2294', 'Variant ': 'Standard', 'TimeControl ': '600+5', 'ECO ': 'B03', 'Termination ': 'Normal'}
{1: ['e4', 'Nf6'], 2: ['e5', 'Nd5'], ..43: ['Qxc3', 'Be4+'], 44: ['Ka1', 'Bxc3+'], 45: ['Rxc3', 'Qb4'], 46: ['Rc8+', 'Kf7'], 47: ['Rd7+', 'Kf6'], 48: ['Rf8+', 'Qxf8', '0-1']}
>>>
"""
Камиль Дулатов
Камиль Дулатов
21 729
Лучший ответ
Регулярками распарсь. Для скобок примерно такая:
\[([^\s]*)\s+\"([^\"]*)\"\]
Для ходов такая:
\d+\.\s*([^\s]+)\s+([^\s]+)
Вторую нужно немного доработать, либо следить когда кончатся скобки
Ну первые строчки просто переменная = строка либо их заносить в список.
А саму партию через str.split(".") Либо str.split() - удобнее работать будет с пробелом

Открытие файла - with open(fileName+".txt", "r") as f:
...
Д*
Денис **
34 935