我遇到一个问题,我的 JSON 文件在一段时间后在文件末尾添加了另一个括号,这使得leaderbord 命令无法读取该文件。这是我的代码:dict = Counter() @commands.command() async def cupcake(self, ctx): id = str(user.id) if id in dict: dict[user.id] += 1 else: dict[user.id] += 1 with open('users.json', 'r+') as f: json.dump(dict, f)然后,我运行排行榜命令。 @commands.command(pass_context=True) async def top(self, ctx): with open('users.json', 'r') as fg: data = json.load(fg) top_cakes = {k: v for k, v in sorted(data.items(), key=lambda item: item[1], reverse=True)} names = '' for postion, user in enumerate(top_cakes): names += f'<@!{user}> has {top_cakes[user]}\n' embed = discord.Embed(title="Cupcake top", color=0xF9CF7A) embed.add_field(name="Top bakers:", value=names, inline=False) await ctx.send(embed=embed)这是 JSON 文件:(我已替换了实际的用户 ID){"USERID": 3, "USERID": 2}这是几次获得积分后会发生的情况:{"USERID": 1} "USERID": 2}我无法确定它何时发生,它似乎完全是随机的。经过几次获得积分后,它会在名字上添加另一个括号。我不知道该怎么做或如何解决它。
1 回答
冉冉说
TA贡献1877条经验 获得超1个赞
{"USERID": 3, "USERID": 2}
当您编写类似的内容,然后编写更短的输出(例如{"USERID": 1}
;)时,可能会发生这种情况。您的代码不会以任何方式截断文件,因此它只会覆盖开头,而旧的、较长的输出的其余部分保留在那里。
可能的解决方案:
以 模式打开文件
'w'
,该模式会在写入之前截断文件。.truncate()
写入文件后显式截断文件(使用)。
在这种情况下,以模式打开文件'w'
可能是更好的方法。
添加回答
举报
0/150
提交
取消