Вы печатаете все содержимое словаря data
при каждом изменении любого его элементов.
Первое изменение - добавление ключа Title:Textbook
. Следующее изменение добавляет Client:ABC
- но поскольку вы печатаете весь словарь, вы видите оба исходный ключ Title
как новый ключ Client
. Это ухудшается со следующей записью для Comic book
. Теперь эта строка содержит новое имя клиента, но ключ Title
по-прежнему содержит неверные данные.
В начале каждой новой записи (обозначенной, по-видимому, этими -----
строками) вы должны очистить свой data
. Кроме того, вы не можете хранить более одного ключа с одинаковым именем в одном словаре; Вы можете иметь только один Title
и один Client
. После прочтения и сохранения следующей строки для Client
вы полностью перезаписали первый элемент данных новой информацией.
Чтобы избежать всего этого, создайте новый словарь и добавьте его в список вместо:
data = []
temp_dict = {}
with open("sample.log", "r") as f_input:
for line in f_input:
if not line.startswith('----------------------------------------'):
key, value = line.strip().split(':',1)
temp_dict[key] = value.strip()
else:
if temp_dict:
data.append(temp_dict)
temp_dict = {}
print(data)
с результатом, теперь список словарей:
[{'Title': 'Textbook', 'Client': 'ABC'},
{'Title': 'Comic book', 'Client': 'DEF'}]