【问题标题】:How can I append and save a list into another file in Discord Py?如何在 Discord Py 中将列表附加并保存到另一个文件中?
【发布时间】:2021-11-14 04:36:11
【问题描述】:

我基本上是在制作一些可以获取用户内容然后将其放入列表的内容。我想将它存储在另一个名为“问题”的文件中,我该怎么做?这是我的主要 Discord Bot 代码

import discord
import random
import problems

TOKEN = "SECRET"

client = discord.Client()

@client.event
async def on_ready():
    print("Bot is ready!")

@client.event
async def on_message(message):
    username = str(message.author).split('#')[0]
    user_message = str(message.content)
    channel = str(message.channel.name)
    print(f"{username}: {user_message} ({channel})")

    if message.author == client.user:
        return
    if message.channel.name == 'test':
        if user_message.lower() == 'hello':
            await message.channel.send(f"Hello {username}!")
            return
        elif user_message.lower() == 'bye':
            await message.channel.send(f"Bye!")
            return
        elif message.content.startswith("!store"):
            a = message.content[6:]
            await message.channel.send("Stored!")
            problemlist = problems.problem.append(a)
            print(problemlist)
    if user_message.lower() == '!code':
        await message.channel.send()
client.run(TOKEN)

这是我的问题的内部.py

problem = []

基本上是一个空列表 当它打印 problemlist 时我得到的是 None

另外,我希望该列表在机器人重新启动后仍然存在。

【问题讨论】:

  • 您能否澄清您是否希望problems.py 中的变量保持不变(即,您是否希望该列表在您停止并重新启动机器人时仍然存在?)
  • @HPringles 是的,我想 :)

标签: python list discord.py


【解决方案1】:

在 python(以及我知道的所有其他语言)中,当您导入另一个 python 文件时,它会将其作为代码加载,因此如果您的 problems.py 如上所述,它每次都会执行 problems = []脚本启动,一旦脚本启动,该内容就会从内存中清除。

如果您正在做一些非常简单的事情,最好的方法是将变量写入文件,使用picklejson。我在下面给出了一个阅读和写作的例子。

import json

def read(filename):
    """Open the file, read it and parse the json"""
    try:
        with open(filename, 'r') as json_file:
            return json.loads(json_file.read())
    except FileNotFoundError:
        return {}

def write(filename, save_object):
    """Open the file, and write the object as json"""
    with open(filename, 'w') as json_file:
        json_file.write(json.dumps(save_object))

# Get the problems list if it exists.
problems = read('problems.json').get('problems', None) 
# If it doesn't create it.
if problems is None:
    problems = []
problems.append("problem")
write('problems.json', {'problems': problems})

这意味着problems.json 文件看起来像这样:

{
    "problems": [ "1", "2", "3", "4"]
}

【讨论】:

  • 出于某种原因,它说Traceback (most recent call last): File "/home/denzel/Desktop/Bot/Denzelbot/Discordd/code.py", line 15, in <module> problems = read('problems.json').get('problems', None) File "/home/denzel/Desktop/Bot/Denzelbot/Discordd/code.py", line 7, in read with open(filename, 'r') as json_file: FileNotFoundError: [Errno 2] No such file or directory: 'problems.json' 我已经创建了一个problems.json 并在那里放置了一个空问题集。
  • 抱歉,我会尽快更新我的答案。如果文件尚未创建,则无法从中读取。
  • 不,我已经创建了一个它仍然说同样的话
  • 很可能您在脚本不期望的位置创建了文件,请尝试更新您的代码以执行与上述类似的操作,这样应该可以解决问题。
  • 对不起,我太笨了,没注意到你编辑了代码......谢谢它现在可以工作了!还想问一下有没有用pickle over json或者反之亦然的用例?
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 2021-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
  • 2015-08-12
  • 1970-01-01
相关资源
最近更新 更多