【发布时间】:2022-01-26 19:01:55
【问题描述】:
我对 python 和编程很陌生,我正在寻找一个不和谐的机器人,它有很多手写的聊天行,可以随机选择并发回给用户。制作一个包含句子列表的非常大的变量似乎是个坏主意。有没有办法可以将聊天线存储在不同的文件中,并让机器人从该文件中的行中选择?或者还有什么更好的方法,我该怎么做?
【问题讨论】:
标签: python discord discord.py
我对 python 和编程很陌生,我正在寻找一个不和谐的机器人,它有很多手写的聊天行,可以随机选择并发回给用户。制作一个包含句子列表的非常大的变量似乎是个坏主意。有没有办法可以将聊天线存储在不同的文件中,并让机器人从该文件中的行中选择?或者还有什么更好的方法,我该怎么做?
【问题讨论】:
标签: python discord discord.py
您可以将数据存储在一个文件中,该文件名为 response.txt
并在discord bot文件中以open("response.txt").readlines()检索它
【讨论】:
我会将这个问题解释为“变量有多大”,答案很简单。当一个变量成为问题时,它太大了。那么,变量怎么会成为问题呢?最大的问题是机器可能会耗尽内存,OOM 杀手(out-of-memory killer)或类似的东西会停止你的程序。您如何知道您的变量是否导致了这些问题?很简单,你的程序崩溃了。
如果变量是静态的(其大小在编译时或解释之前完全已知),您可以计算它需要多少 RAM。 (这对 Python 来说有点麻烦,所以在运行时加载它并使用分析器计算它可能更容易。)如果它超过 ~ 500 兆字节,你应该担心。超过一个千兆字节,您可能想要重新考虑您的方法[^0]。那么,你会怎么做呢?
正如@FishballNooodles 所建议的那样,您可以将数据逐行存储在文件中并将这些行读取到数组中。不幸的是,他们提供的代码仍然会将整个内容读入内存。如果您使用他们提供的代码,您有几个选项,下面列出的并非详尽无遗。
当您需要一行文本时,从文件中使用随机数量的换行符。您将一次查看一个字符,将其与\n 进行比较,如果您遇到了请求的换行数,请阅读该行。就文件中的行数而言,这是 O(n) 最坏的情况。
与其将所需的文本存储在给定的索引中,不如将其位置存储在文件中。然后,您可以找到该位置(可能是 O(1)),然后阅读文本。这在程序开始时需要 O(n) 的构建成本,但在运行时会更好。
使用实际的数据库。通常最好不要重新发明轮子。如果您只是存储纯文本,这可能有点矫枉过正,但不要打折扣。
[^0]:这些数字实际上只是随机的。如果您控制运行代码的服务器环境,那么您可能会想出一些更精确的路标。
【讨论】: