我正在为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
}
}
答案 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)