为了账号安全,请及时绑定邮箱和手机立即绑定

Discord py JSON 文件添加额外的括号

Discord py JSON 文件添加额外的括号

互换的青春 2023-07-05 10:20:00
我遇到一个问题,我的 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'可能是更好的方法。


查看完整回答
反对 回复 2023-07-05
  • 1 回答
  • 0 关注
  • 130 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信