Запись/удаление и редактирование списка в текстовом файле
Столкнулся с проблемой при выполнении домашнего задания по Python.
Суть программы - создание текстового файла с данными пользователей и их паролями. А в самой программе дальнейшее редактирование и изменение данных (удаление, создание нового пользователя).
Но у меня не выходит записать и удалять строки из списка. Запутался сильно и трудно понять как решить проблему, прошу помочь и обьяснить что я делаю не так.
Вот код моей программы.
parol=""
passw=["90232","Soroka5","346129S"]
names=["Sasha","Nikita","Nikolai"]
my_file = open("data.txt", "w+")
def registration(passw,names):
newparol=""
while newparol !="R" :
newparol=input("Введите новое имя: ")
if newparol in names:
print("Такое имя уже есть, предложите другое. \n : ")
continue
names.append(newparol)
newlogin= input("Введите пароль: ")
passw.append(newlogin)
#control.update(newparol)
print(passw)
print(names)
f = open('data.txt', 'wt')
for s in passw:
f.write(s + '\n')
for s in names:
f.write(s + '\n')
return passw,names
def udal(passw,names):
print("\nСписок пользователей: \n")
print("Пароль: ", passw)
print("Логин: ", names)
newname=""
while newname !="X" :
newname=input(" Введите логин для удаления. (Или X что бы вернутся в меню.)\n : ")
if newname in names :
numb=names.index(newname)
f = open('data.txt', 'w')
print("Удаленно!")
names.remove(newname)
passw.pop(numb)
print(passw)
print(names)
else:
print("Такого имени нет. ")
return passw,names
while parol!="X":
parol= input(" Добро пожаловать. \n Введите X для завершения работы.\n Или введите R для создания нового пользователя. \n Введите D - что бы удалить существующего пользователя. \n Или введите свой пароль что бы войти. \n : ")
if parol=="R" :
registration(passw,names)
continue
elif parol=="D":
udal(passw,names)
continue
elif parol=="X":
break
elif parol in passw:
numb=control.index(parol)
person=names[numb]
print("\nПоздравляю! ", person, " - Вы в системе.")
else:
print("Ошибка в пароле. Похоже такого не существует.")
input("\n Досвидания!")
Ответы (1 шт):
Автор решения: GrAnd
→ Ссылка
def load_data():
try:
with open("data.txt") as f:
users = {}
# читаем из файла построчно
for line in f:
# в каждой строке записаны имя и пароль через символ табуляции
name, passw = line.strip("\n").split("\t")
users[name] = passw
except FileNotFoundError:
# в случае отсутствия файла инициализируем словарь начальными данными
users = {"Sasha" : "90232",
"Nikita" : "Soroka5",
"Nikolai" : "346129S"
}
return users
def save_data():
with open("data.txt", "w") as f:
for name in users:
# сохраняем пользователей построчно как имя и пароль через символ табуляции
f.write(name + "\t" + users[name] + '\n')
def registration(users):
while True:
name = input("Введите новое имя (или X чтобы вернуться): ")
if name == "X":
return
if name not in users:
passw = input("Введите пароль: ")
users[name] = passw
break
print("Такое имя уже есть, предложите другое.\n")
save_data()
def udal(users):
print("\nСписок пользователей: \n")
print(", ".join(users))
while True :
name = input(" Введите логин для удаления. (Или X что бы вернутся в меню.): ")
if name == "X":
return
if name in users:
del users[name]
print("Удаленно!")
break
print("Такого имени нет. ")
save_data()
# начальная загрузка
users = load_data()
while True:
menu = input(" Добро пожаловать. \n Введите X для завершения работы.\n Или введите R для создания нового пользователя. \n Введите D - что бы удалить существующего пользователя. \n Или введите свой пароль что бы войти. \n : ")
if menu == "R":
registration(users)
elif menu == "D":
udal(users)
elif menu == "X":
break
elif menu in users.values():
# берём индекс пароля среди значений словаря
numb = list(users.values()).index(menu)
# берём соответствующее этому индексу имя среди ключей словаря
name = list(users.keys())[numb]
print("\nПоздравляю! ", name, " - Вы в системе.")
else:
print("Ошибка в пароле. Похоже такого не существует.")
input("\n Досвидания!")