Парсинг файла .txt python

У меня есть текстовый файл (кот пополняется) со след структурой:
номер
текст
далее два пропуска и так далее

Пример:

1.2
текст текст
текст текст

1.3
текст текст
текст текст

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

data = list(filter(None, f.read().split('\n')))

затем бегать по элементам и находить индексы элементов, кот числа и далее делать срезы по этим индексам, но на последнем этапе застропорился, кажется, будто усложняю.


Ответы (2 шт):

Автор решения: Jack_oS

Прочитайте содержимое с разделением по переносу строки (без пустых):

with open('text.txt') as f:
    content = list(filter(None, f.read().split('\n')))

Сохраните в словарь со значениями-списками:

tmp_dict = dict()
for el in content:
    if el[0].isdigit():
        key = el
        tmp_dict.update({key: []})
    else:
        tmp_dict[key].append(el)

Для такого text.txt:

1.1
текст текст
текст текст

1.2.1
текст1 текст2
текст3 текст4
текст5 текст6



13.1.0
текст: текст текст текст текст!
текст, текст текст, текст текст?

42.13.17
текст текст
текст текст

в tmp_dict будет:

>>> tmp_dict
{
    '1.1': ['текст текст', 'текст текст'], 
    '1.2.1': ['текст1 текст2', 'текст3 текст4', 'текст5 текст6'], 
    '13.1.0': ['текст: текст текст текст текст!', 'текст, текст текст, текст текст?'], 
    '42.13.17': ['текст текст', 'текст текст']
}

И соедините значения через пробел:

my_dict = {k: ' '.join(v) for k,v in tmp_dict.items()}

В результирующем my_dict:

>>> my_dict
{
    '1.1': 'текст текст текст текст', 
    '1.2.1': 'текст1 текст2 текст3 текст4 текст5 текст6', 
    '13.1.0': 'текст: текст текст текст текст! текст, текст текст, текст текст?', 
    '42.13.17': 'текст текст текст текст'
}

upd алгоритм "споткнется", если строка с текстом будет начинаться с цифры ("1Q84 — многотомный роман японского писателя Харуки Мураками" например)... нужна более строгая проверка:

if all(n.isdigit() for n in el.split('.')):

так ключами станут только те строки, которые имеют цифры между точками (сколько бы их ни было, 1.1 или 1.2.3.4.13.42)

→ Ссылка
Автор решения: Никита Смяцкий

Поскольку текст разделяется 2 переносами строк,то все оказалось куда проще. побили по двум пропускам

with open(filename, encoding='utf-8') as file:
    data = file.read().split('\n\n')

processed_dict = {}
for elem in data:
    version = list(filter(None, elem.split('\n'))) # удаляем пустые строки
    processed_dict[version[0]] = ', '.join(version[1:])
→ Ссылка