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

我遇到一个问题,我的 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}

我无法确定它何时发生,它似乎完全是随机的。经过几次获得积分后,它会在名字上添加另一个括号。我不知道该怎么做或如何解决它。


互换的青春
浏览 131回答 1
1回答

冉冉说

{"USERID": 3, "USERID": 2}当您编写类似的内容,然后编写更短的输出(例如{"USERID": 1};)时,可能会发生这种情况。您的代码不会以任何方式截断文件,因此它只会覆盖开头,而旧的、较长的输出的其余部分保留在那里。可能的解决方案:以 模式打开文件'w',该模式会在写入之前截断文件。.truncate()写入文件后显式截断文件(使用)。在这种情况下,以模式打开文件'w'可能是更好的方法。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python