【发布时间】:2020-11-04 16:28:38
【问题描述】:
我正在尝试为我的 discord 机器人创建一个命令,从服务器中删除一个所谓的“派系”。派系存储在一个整洁的 JSON 中,像这样
{
"Meme Faction": {
"members": [],
"owner": 429935667737264139,
"description": "This is the description :smile:",
"member role": 773580603072839710,
"owner role": 773580603605516290
},
"Gamer Faction": {
"members": [],
"owner": 429935667737264139,
"description": "This is the description :smile:",
"member role": 773580603072839710,
"owner role": 773580603605516290
}
}
这是应该删除派系的代码:
@commands.command(aliases=["d"])
async def delete(self, ctx, *, name: str):
with open("configs/factions.json", "r+") as f:
factions_json = json.load(f)
factions_list = list(factions_json.keys()) # loads JSON keys as list
name_capital = name.title()
if name_capital in factions_list:
member_role = ctx.guild.get_role(factions_json[name_capital]["member role"])
owner_role = ctx.guild.get_role(factions_json[name_capital]["owner role"])
await member_role.delete() # deletes faction role
await owner_role.delete() # deletes faction owner role
# JSON remove code
factions_json.pop(name_capital)
f.seek(0)
json.dump(factions_json, f, indent=4)
await ctx.message.add_reaction("✅")
问题是,它不是从 JSON 中删除派系,而是将另一个版本的 JSON 附加到末尾,而不是派系。像这样:
{
"Meme Faction": {
"members": [],
"owner": 429935667737264139,
"description": "This is the description :smile:",
"member role": 773580603072839710,
"owner role": 773580603605516290
},
"Gamer Faction": {
"members": [],
"owner": 429935667737264139,
"description": "This is the description :smile:",
"member role": 773580603072839710,
"owner role": 773580603605516290
}
}{
"Meme Faction": {
"members": [],
"owner": 429935667737264139,
"description": "This is the description :smile:",
"member role": 773580603072839710,
"owner role": 773580603605516290
},
}
如何覆盖 JSON 而不是附加到它?
【问题讨论】:
标签: python json python-3.x dictionary discord.py