Скрипт Python сохраняет только последнюю строку

Есть вот такой вот скрипт:

import json


while True:
    print("1. Добавить новую запись")
    print("2. Поиск по записям")
    print("0. выйти из программы")
    cmd = input("Выберите пункт: ")


if cmd == "1":
  print ("Ввод данных")

  allowed_characters= ['1','2','3','4','5','6','7','8','9','0']

  data = {"Введите ID": input ()}
  if any(x not in allowed_characters for x in data):
        print("error: Ввод только цифр")
       

  print ("Введите ФИО")

  data = {"Name": input ()}

  print ("Введите email")
  
  data = {"Email": input ()}

  print ("Введите номер телефона")

  data = {"Phone": input ()}
  

  with open("users.json", "a+", encoding="utf-8") as file:
           file.write('\n')
           json.dump(data, file, ensure_ascii=False)


elif cmd == "2":
       print ("Введите данные для поиска")
       w = input()
       with open("Users.json") as fin:
           for s in fin.readlines():
              if s.find(w) > -1:
                print(s.strip())


elif cmd == "0":
                break

Проблема в следующем - сохраняет в файл только последнюю строку - Phone, при этом каких либо ошибок не выдает. При этом изначально, когда писался только блок ввода данных скрипт отрабатывал как надо, этот блок не изменялся.

Кто может подсказать в какую сторону смотреть?

Python 3.10.1


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

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

В этом блоке кода вы каждый раз заново пересоздаете словарь data, вместо того, чтобы добавлять в него значения

print ("Введите ФИО")
data = {"Name": input ()}
print ("Введите email")
data = {"Email": input ()}
print ("Введите номер телефона")
data = {"Phone": input ()}

Правильно будет добавлять значения так (можно еще упростить код, добавив аргумент print() в input()):

data = {"Name": input("Введите ФИО\n")}
data["Email"] = input("Введите email\n")
data["Phone"] = input("Введите номер телефона\n")

Подробнее про словари можно почитать здесь

→ Ссылка