Способ группировать таким образом состоит в том, чтобы поддерживать два списка, внешний список для всех групп и внутренний список для отдельных групп. Каждый раз, когда группа собирается, и группа к «внешнему» списку и начинает новый список группы.
with open('groups.txt') as f:
groups = []
group = []
for line in f:
if line == '.\n':
continue
if line.startswith('Group'):
if group:
groups.append(group)
group = []
group.append(line.strip())
else:
group.append(line.strip().split())
# Collect the final group, if there is one
if group:
groups.append(group)
print(groups)
Результат:
[['Group A', ['John', '25', 'USA'], ['Ali', '20', 'Indonesia'], ['Christina', '30', 'India']],
['Group B', ['Chris', '30', 'Australia'], ['ZhangMing', '20', 'China']]]
Редактировать, основываясь на измененном вопросе:
Создание новых переменных в глобальном пространстве имен возможно, но обычно это не очень хорошая идея (невозможно определить, является ли Group_A
ошибкой или было вызвано из каких-либо данных). Наилучшим подходом является создание контейнера (списка или dict) для хранения значений и доступа к ним в контейнере.
В этом примере используется defaultdict для хранения сгенерированных списков.
from collections import defaultdict
with open('groups.txt') as f:
groups = defaultdict(list)
group = []
for line in f:
if line == '.\n':
continue
if line.startswith('Group'):
key = line.strip()
else:
groups[key].append(line.strip().split())
print(groups)