Похоже, у вас есть куча записей без видимого разделения, состоящего из линий, следующих за этим шаблоном: key* : *value
.
Принцип, который я бы использовал, состоит в создании списка словарей (по одной на запись ), а также сохраните набор всех ключей, чтобы иметь возможность впоследствии построить кадр данных, даже если некоторые ключи отсутствуют в некоторых записях.
В следующем коде предполагается, что повторение ключа отмечает начальную точку Новая запись.
...
# the set of all keys, even from different records
cols = set()
# the current record, empty at the beginning of file
rec = {}
# the list of all records
data = [rec]
# Open the file
with io.StringIO(t) as content:
# read it line by line
for line in content:
# split in key: value and strip blanks
header, value = (txt.strip() for txt in line.split(':', 1))
if header not in rec: # create a new record
rec[header] = value
cols.add(header)
else:
rec = {header: value} # feed current record
data.append(rec)
# time to build the dataframe
df = pd.DataFrame(data, columns = list(cols))