如何使用python从json文件中删除项目

时间:2020-04-21 07:43:44

标签: python json discord.py

我正在为Discord服务器编程Discord机器人,但是我没有找到从json文件中删除对象的方法。我认为我已经导入了执行此操作所需的所有内容:

import discord
import json
from webserver import keep_alive
from discord.ext import commands
import discord.utils
import os
from discord import Game

@bot.event
async def on_member_remove(member):
  with open('users.json', 'w') as f:
      users = json.load(f)
      users.remove(member.id)

我正在尝试删除有关离任成员的信息。例如,我正尝试从以下位置删除702036854253289512

{
    "702036299242274876": {
        "Rank": 0,
        "komppevoice": 0
    },
    "702036854253289512": {
        "Rank": 0,
        "komppevoice": 0
    }
}

3 个答案:

答案 0 :(得分:0)

首先,我不认为字典上没有remove方法。其次,您需要在编辑后重新保存文件。

@bot.event
async def on_member_remove(member):
  with open('users.json', 'r') as f:
      users = json.load(f)

  del users[member.id]

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

答案 1 :(得分:0)

您需要先从字典中删除密钥,然后将其保存到文件中。

您可以使用dict.pop或del dicti [key]从字典中删除键。

users.pop(member.id)

del users[member.id]

答案 2 :(得分:0)

按照Nighthawk454的建议使用del users[member.id]会导致如果文件中没有member.id时抛出KeyError异常,因此仅在确保member.id存在或处理异常的情况下才使用它: / p>

@bot.event
async def on_member_remove(member):
    with open('users.json', 'r') as f:
        users = json.load(f)
try:
    del users[member.id]
    with open('users.json', 'w') as f:
        json.dump(users, f)
except KeyError as exc:
    log.warning(f"Member {member.id} is missing in users.json")

其他选择是使用dict.pop(key, [default]),如果您提供默认值,则不会引发错误:

@bot.event
async def on_member_remove(member):
    with open('users.json', 'r') as f:
        users = json.load(f)

    removed_user = users.pop(member.id, None)
    if removed_user:
        with open('users.json', 'w') as f:
            json.dump(users, f)