Как я могу позволить пользователю удалить объект из файла .txt, используя Json через Python - PullRequest
0 голосов
/ 14 октября 2019

Обобщение проблемы

Я создал эту адресную книгу, которая выгружает пользовательский ввод в файл .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 ]

0 голосов
/ 14 октября 2019

open(path, "a") добавит (добавит) в файл. Предполагая, что ваш файл - json, вам нужно сначала прочитать содержимое с помощью чего-то вроде:

with open(path, "r") as f:
    content = json.load(f)

, затем изменить содержимое, удалить ненужные вещи и, наконец, записать обратно в файл:

with open(path, "w") as f:
    json.dump(content, f)
0 голосов
/ 14 октября 2019

Вы можете использовать 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())}')
...