Как я могу позволить пользователю удалить объект из файла .txt с помощью Json через Python
Обобщение проблемы
Я создал эту адресную книгу, которая выгружает вводимые пользователем данные в файл.txt. Я хочу, чтобы пользователь мог стирать человека, сохраненного в адресной книге (файл.txt), если они того пожелают. Как мне это сделать? В основном я просто хочу, чтобы он был удален из файла.txt без необходимости вручную делать это сам и не избавляясь от других имен и информации
Что я пробовал
Вот какой-то код, который я ввел в свою программу, чтобы попытаться позволить пользователю выполнить задачу по удалению кого-то, но он работал гладко, но затем, когда я пошел, чтобы проверить файл.txt, человек и его информация все еще остались.
if input("would you like to remove someone from the registry?('Yes' or 'No')") == "Yes":
who_delete = input("Who would you like to remove?")
del who_delete
(Я ввел приведенный выше код под строкой book = {} в коде, указанном под строкой.)
#current code
import json
book = {}
Name = input("Enter a name")
book[Name] = {
"Address": input("Enter an adress"),
"Phone": input("Enter a phone number"),
}
s=json.dumps(book, indent=2)
with open("C://Users//user//OneDrive//Desktop//Library//Coding and Programming Projects//Self Projects//Address Book//addressbook.txt", "a") as f:
f.write(s)
Ожидаемый результат: удаление объекта из файла.txt через оболочку во время работы программы без необходимости вручную делать это с файлом.txt.
Фактический результат: объект не был удален из файла.txt
2 ответа
Вы можете использовать pop
чтобы удалить ключ и его значение из словаря. В этом случаеbook.pop(Name)
следует удалить имя и его детали.
Вероятно, также разумно проверить, что имя, которое вводит пользователь, находится в словаре (и что оно написано правильно), иначе вы получите сообщение об ошибке при попытке вставить несуществующий ключ. Вы могли бы сделать что-то вроде
input_response = input("would you like to remove someone from the registry?('Yes' or 'No')")
if input_response == "Yes":
who_delete = input("Who would you like to remove?")
if who_delete in books:
books.pop(who_delete)
else:
print(f'Name {who_delete} not in books, please choose a valid key from {list(books.keys())}')
open(path, "a")
добавит (добавит) в файл. Предполагая, что ваш файл json, вам нужно сначала прочитать содержимое примерно так:
with open(path, "r") as f:
content = json.load(f)
затем измените содержимое, удалив то, что вам не нужно, и, наконец, напишите обратно в файл:
with open(path, "w") as f:
json.dump(content, f)