Если я вас правильно понимаю, вы хотите разбить текст на параграфы, основываясь на строках с наименьшим отступом.
Способ, которым я хотел бы подойти к этому, заключается в следующем. Я бы создал defaultdict с ключом в качестве номера пробелов, составляющих отступ, и в качестве значения список со всеми индексами строк, имеющих этот счет отступов:
from collections import defaultdict
text = '''TextTextTextTextTextTextTextTextText1
TextTextTextTextTextTextTextTextText1
TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText2
TextTextTextTextTextTextTextTextText3
TextTextTextTextTextTextTextTextText3
TextTextTextTextTextTextTextTextText3
TextTextTextTextTextTextTextTextText4
TextTextTextTextTextTextTextTextText4
TextTextTextTextTextTextTextTextText4'''
def count_indentation(line):
return len(line) - len(line.lstrip())
lines = text.splitlines(keepends=False)
indent_dict = defaultdict(list)
for idx, line in enumerate(lines):
if count_indentation(line) > 0:
indent_dict[count_indentation(line)].append(idx)
Теперь indent_dict
выглядит следующим образом:
defaultdict(list, {8: [1, 3, 4, 5, 6, 8, 9, 11, 12], 4: [2, 7, 10]})
Далее мы берем наименьший ключ, чтобы найти индексы соответствующих строк:
smallest_indent = min(indent_dict)
line_idexes_smallest_indents = indent_dict[smallest_indent]
Результат line_idexes_smallest_indents
равен [2, 7, 10]
. Индексирование начинается с нуля, поэтому мои индексы на единицу меньше вашего результата. Теперь нам нужно разбить наш оригинальный текст по этим индексам.
def partition(lines, indices):
return [''.join(lines[i:j]) for i, j in zip([0]+indices, indices+[None])]
partition(lines, line_idexes_smallest_indents)
Результат:
['TextTextTextTextTextTextTextTextText1 TextTextTextTextTextTextTextTextText1',
' TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2 TextTextTextTextTextTextTextTextText2',
' TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3 TextTextTextTextTextTextTextTextText3',
' TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4 TextTextTextTextTextTextTextTextText4']