如何使用 del 从 JSON 文件中删除整个列表(包括其名称)并查看该文件中反映的更改?

问题描述 投票:0回答:1

我正在尝试制作一个应用程序,允许用户删除包含项目的列表。列表将保存在 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 显示。

除此之外,我尝试在网上寻找答案,但找不到任何有帮助的东西。

python json list dictionary del
1个回答
0
投票

最小的修复是将

data
保存到新文件而不是
bestande_data

但更根本的是,您可能需要更好地了解这些部分如何相互作用。

您可能想要更改整体设计,以在单独的函数中读取数据、操作数据和写入数据。这样就更容易、更明显地知道什么去哪里了。

def main():
    filename = "opslag.json"
    data = read_data(filename)
    update(data)
    save_data(filename, data)
© www.soinside.com 2019 - 2024. All rights reserved.