首页 > 解决方案 > 如何从 JSON 文件中删除某行:discord.py

问题描述

我有一个库存系统,但即使数字为 0,该项目仍向我显示如何从 JSON 文件中删除该项目我希望如果库存中的数字为 0,则该项目已从库存中删除所以它不再显示

async def remove_this(user,item_name,amount):
    item_name = item_name.lower()
    name_ = None
    for item in tools:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break
    for item in Weapon:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break
    for item in drugs:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break
    for item in admins:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break
    for item in admins2:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break
    for item in csyon:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break
    for item in admins3:
        name = item["name"].lower()
        if name == item_name:
            name_ = name
            break

    if name_ == None:
        return [False,1]

    users = await get_bank_data()

    try:
        index = 0
        t = None
        for thing in users[str(user.id)]["bag"]:
            n = thing["item"]
            if n == item_name:
                old_amt = thing["amount"]
                new_amt = old_amt - amount
                if new_amt < 0:
                    return [False,2]
                users[str(user.id)]["bag"][index]["amount"] = new_amt
                t = 1
                break
            index+=1
        if t == None:
            obj = {"item":item_name , "amount" : amount}
            users[str(user.id)]["bag"].append(obj)
    except:
        obj = {"item":item_name , "amount" : amount}
        users[str(user.id)]["bag"] = [obj]

    with open("Bank.json","w") as f:
        json.dump(users,f)


    return [True,"Worked"]

我的 JSON 文件:

{
  "488415087011561493": {
    "wallet": 0, 
    "bank": 5000, 
    "black": 4400,
    "bag": [
      {
        "item": "opium",
        "amount": 3
      }, 
      {
        "item": "heroin", 
        "amount": 0
      }
    ]
  }
}

请不要担心这些物品 - 这是 GTA 5 RP 机器人

标签: pythondiscorddiscord.py

解决方案


这可以通过两种方式完成:

  1. 在显示玩家库存的函数中,检查amount == 0,如果是,则不显示。
...
if users[user_id]["bag"][index]['amount'] != 0:
    #display item
...
  1. 我认为你想要的:如果 new_amt == 0 从列表中删除项目。
    ...
        new_amt = old_amt - amount
                if new_amt < 0:
                    return [False,2]
        if new_amt != 0:
                users[str(user.id)]["bag"][index]["amount"] = new_amt
        else: 
                del(users[str(user.id)]["bag"][index])
                t = 1
    ...

推荐阅读