Скрипт 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")
Подробнее про словари можно почитать здесь