【发布时间】: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