0

问题总结

我制作了这个地址簿,将用户输入转储到 .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)

预期结果:在运行程序时通过 shell 从 .txt 文件中删除一个对象,而无需在 .txt 文件上手动执行此操作

实际结果:对象未从 .txt 文件中删除

4

2 回答 2

0

您可以使用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())}')
于 2019-10-14T20:18:02.040 回答
0

open(path, "a")将追加(添加)到文件中。假设您的文件是 json,您需要先读取内容,例如:

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

然后改变内容,删除你不想要的东西,最后写回文件:

with open(path, "w") as f:
    json.dump(content, f)
于 2019-10-14T20:20:37.557 回答