我正在尝试制作一个应用程序,允许用户删除包含项目的列表。列表将保存在 JSON 文件中,因此不必不断添加相同的列表。
删除一个项目可以,但删除整个列表似乎不起作用。当我从列表中删除一个项目时,它会显示在 JSON 文件中,但当我尝试删除包括其名称在内的整个列表时,JSON 中的任何内容都不会发生变化(而
print
语句显示它有效)。
请记住,我想删除列表本身,而不仅仅是项目。
更改未显示在 JSON 文件中,我看不出问题所在。
您将在下面找到我的 Python 代码和当前的 JSON 文件。
import json
# Saves the edited data in the json file
def opslaan(data):
"""
Saves the data to the json file.
Arguments:
data (dict): the list that needs to be saved to the json file
"""
try:
with open("opslag.json", "r") as f:
bestaande_data = json.load(f)
except (FileNotFoundError, json.JSONDecodeError):
bestaande_data = {}
bestaande_data.update(data)
with open("opslag.json", "w") as f:
json.dump(bestaande_data, f, indent=4)
# Loads the json
def ophalen():
with open("opslag.json", "r") as f:
return json.load(f)
# Asks the user to delete data
def item_verwijderen(data):
volledig_of_item = input("Would you like to delete an item or a whole list?")
if volledig_of_item == "item":
verwijderen_lijst = input("From what list would you like to delete an item?")
item_lijst = input("What item would you like to delete?")
data[verwijderen_lijst].remove(item_lijst)
else:
lijst = input("What list would you like to delete?")
del data[lijst]
opslaan(data)
lijst = {}
data_opslaan = opslaan(lijst)
data_ophalen = ophalen()
item_verwijderen(data_ophalen)
print(data_ophalen)
当前 JSON 文件:
{
"Games": [
"League of Legends",
"Call of Duty",
"Football Manager",
"Cyberpunk"
],
"Films": [
"Deadpool",
"Wolverine",
"Pirates of the Caribbean"
]
}
命令输入:
Would you like to delete an item or a whole list?list
What list would you like to delete?Games
{'Films': ['Deadpool', 'Wolverine', 'Pirates of the Caribbean']}
预期的 JSON 文件:
{
"Films": [
"Deadpool",
"Wolverine",
"Pirates of the Caribbean"
]
}
实际生成的 JSON 文件:
{
"Games": [
"League of Legends",
"Call of Duty",
"Football Manager",
"Cyberpunk"
],
"Films": [
"Deadpool",
"Wolverine",
"Pirates of the Caribbean"
]
}
我尝试使用
.clear()
方法,虽然它确实删除了列表中的项目,但它也没有删除名称,这也是我想要删除的。不过,这些更改确实显示在 JSON 文件中,所以我不知道为什么这些更改没有通过 del 显示。
除此之外,我尝试在网上寻找答案,但找不到任何有帮助的东西。
最小的修复是将
data
保存到新文件而不是 bestande_data
。
但更根本的是,您可能需要更好地了解这些部分如何相互作用。
您可能想要更改整体设计,以在单独的函数中读取数据、操作数据和写入数据。这样就更容易、更明显地知道什么去哪里了。
def main():
filename = "opslag.json"
data = read_data(filename)
update(data)
save_data(filename, data)