Я нашел немного лучшее решение, чем break
утверждения, как я предложил в комментарии:
Вы можете создать список result
и сохранить данные каждого чанка в отдельном элементе списка (например, в dict). Если вы читаете не заголовок строку, вы можете гарантировать, что только что прочитанная строка связана с текущим фрагментом данных. А текущий кусок данных является последним элементом в списке result
, так что вы можете просто изменить его. Если вы читаете строку Header , вы просто добавляете новый элемент к result
и начинаете записывать в него новые данные чанка.
Если размер содержимого постоянен, вы можете использовать итератор itertools.cycle
, который "кодифицирует" ваш процесс анализа:
from itertools import cycle
text1 = """Header1
number of Samples1
Content1
a1, aa1, aaa1
b1, bb1, bbb1
Header2
number of Samples2
Content2
a2, aa2, aaa2
b2, bb2, bbb2"""
size = 5
iterator = cycle(range(size))
result = []
for line in text1.split('\n'):
i = next(iterator)
if i == 0:
result.append({'header': line})
elif i == 1:
result[-1]['num_of_samples'] = line
elif i == 2:
result[-1]['content_header'] = line
elif i == 3:
result[-1]['content'] = [line.split(', ')]
else:
result[-1]['content'].append(line.split(', '))
Если вы не знаете размер контента, вам следует проанализировать каждую строку, проверить ее тип и создать данные вручную:
text2 = """Header1
number of Samples1
Content1
a1, aa1, aaa1
b1, bb1, bbb1
b1, bb1, bbb1
Header2
number of Samples2
Content2
b2, bb2, bbb2
Header3
number of Samples3
Content3
a3, aa3, aaa3
b3, bb3, bbb3"""
result = []
i = 0
for line in text2.split('\n'):
if line.startswith('Header'): # Your condition for headers
result.append({'header': line})
elif line.startswith('number'): # Your condition for number of samples
result[-1]['num_of_samples'] = line
elif line.startswith('Content'): # Your condition for content headers
result[-1]['content_header'] = line
else:
if 'content' not in result[-1]: # We don't know is the content list created
result[-1]['content'] = [line.split(', ')]
else:
result[-1]['content'].append(line.split(', '))