【问题标题】:JSON File clears every time new information is written to it每次向其写入新信息时,JSON 文件都会清除
【发布时间】:2018-12-15 07:11:44
【问题描述】:

所以基本上我有一个 JSON 文件保存来自我的不和谐服务器的每条消息,它适用于第一条消息,但是当第二条消息保存到“data.txt”文件时,原始消息被删除/被覆盖并从文件中消失。我怎样才能使所有消息都保存为单独的项目...

  @bot.event
    async def on_message(message):
        contents = message.content
        data = [contents]
        for word in contents:
            with open('data.txt', 'w') as outfile:
                data.append(json.dump(str(data), outfile))

            await bot.process_commands(message)

【问题讨论】:

  • 您必须将 json 作为字典加载到内存中,修改该字典,然后将其写回文件。 Json 看起来不是用于此目的的最佳格式。您想要一些可以在附加模式下打开并添加更多数据的东西。可能只是您将repr(message.content) 写入的文本文件?
  • @PatrickHaugh 我不想手动添加数据,机器人应该自动为我做这件事......这就是为什么我有 data.append() 功能......你能解释一下吗添加更多数据是什么意思?在我的脑海中,我认为您的意思是我手动打开文件并手写数据,但这最终是机器人的用途。谢谢!
  • 当我说“你”写入文件时,我的意思是你编写的代码可以让机器人做到这一点。抱歉,如果不清楚。我建议以附加模式打开文件的原因是因为文件 I/O 和 json 模块是阻塞操作而不是异步操作。如果您的代码阻塞时间过长,它可能会使您的机器人崩溃。您可以使用open("file.txt", 'a') 以追加模式打开文件。这将允许您将新消息作为一种日志写入文件,而不是将整个文件读入一个对象,然后将该对象写回文件。
  • 当我将代码更改为 ("file.txt", 'a') 时,我的列表仍然只是一堆空的列表项,后跟单词“none”...我将打印我在这里的清单:“[无,无,无,无,无]”“[无,无,无,无,无,无]”“[无,无,无,无,无,无,无]”
  • 为什么 list.append 会这样做????我也尝试了 list extend 但这将每个列表项分解为单个字符...

标签: json python-3.x discord.py


【解决方案1】:

这就是我要做的。这会将机器人看到的每条消息作为字符串文字放在它自己的行上。无论您拥有何种消费者,都应该在此文件上逐行调用ast.literal_eval 以重构消息。

@bot.event
async def on_message(message):
    if message.author == bot.user:
        return 
    with open('data.txt', 'a') as f:
        print(repr(message.content), file=f)
    await bot/process_commands(message)

【讨论】:

  • 谢谢帕特里克,最初我不明白如何应用您对 repr 的建议,但现在我可以看到它是如何使用的,而且更有意义,我以为您是在说摆脱 json 文件和使用 repr 代替它,非常感谢
猜你喜欢
  • 1970-01-01
  • 2021-10-23
  • 1970-01-01
  • 1970-01-01
  • 2016-07-21
  • 1970-01-01
  • 2020-12-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多