【问题标题】:How to read only the number from json file with python - discord.py?如何使用 python - discord.py 仅读取 json 文件中的数字?
【发布时间】:2022-11-14 00:40:45
【问题描述】:

我有一个包含以下内容的文件:

{
    "Youtube tutorial bot test": {
        "ivan4o assistant": 0,
        "kurwa qvor": 1
    }
}

我希望它只读取数字。

我试过这段代码:

def warns_check(member: discord.Member):
    with open('warns.json', 'r') as f:
        warns = json.load(f)
        warns[str(member.name)]
    return warns

@client.command()
async def checkwarns(ctx, member: discord.Member):
    warns = warns_check(member)
    await ctx.send(f"{member.name} has {warns} warnings")

它读取整个文件。 如何解决这个问题?

【问题讨论】:

  • 我不确定我是否在关注...您想从 python 中的 JSON 文件中读取数字(即values)吗?解析它们。你的行:warns = json.load(f) 读取文件的内容,解析得到你想要的数据

标签: python discord.py


【解决方案1】:

我希望它只读取数字。

为了获取您需要使用的号码来访问它

warns["Youtube tutorial bot test"][member.name]

它读取整个文件。如何解决这个问题?

您实际上是在阅读一个文本文件,因此您总是需要加载整个文件。我建议使用数据库(sqlite 或 Mongo 是不错的选择)。使用 json 文件也会出现并发问题。

此外...

我建议使用 member.id 这是一个独特的 ulong(Python 中的 int),不像用户可以更改的名称

【讨论】:

    【解决方案2】:

    它读取整个文件,因为您要返回整个文件。第二行取出一个特定的值,但您没有将它分配给任何东西,因此该行不做任何事情。

    warns = json.load(f)  # <- Read whole file & assign to "warns"
    warns[str(member.name)]  # <- Does nothing
    return warns  # <- "warns" still contains the whole file
    

    您将希望返回该特定部分而不是整个文件。

    return warns[str(member.name)]
    

    此外 - JSON 片段在达到数字之前有 2 个级别,因此缺少密钥访问。

    【讨论】:

      猜你喜欢
      • 2021-09-26
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      相关资源
      最近更新 更多