是否可以在不保存到硬盘的情况下使用Discord.py编写和发送文件



我正在尝试创建一个机器人程序,该程序编译频道消息中的信息,并将其转换为CSV文件,然后发送回用户。目前,我正在将文件写入硬盘,然后发送该文件(下面的工作代码(。

csv = open('pyro.csv', 'w')
csv.write('date,store,sku,size,product,profile,proxies,ordern')
# PULL DATA FROM CHANNEL
try:
for m in history:
if m.webhook_id == ECB_ID and date_1 <= m.created_at.date() <= date_2:
for e in m.embeds:
fields = e.to_dict().get('fields')
if fields is not None and len(fields) == 7:
product = fields[3].get('value')
if target_product in product.lower():
store = fields[0].get('value')
sku = fields[1].get('value')
size = fields[2].get('value')
profile = fields[4].get('value').split('||')[1]
proxies = fields[5].get('value').split('||')[1]
order = fields[6].get('value').split('||')[1]
csv.write(m.created_at.strftime('%m/%d/%y') + "," + store + "," + sku + "," + size + "," + product + "," + profile + "," + proxies + "," + order + "n")
except:
await ch.send('Error: data error')
return
# SEND CSV MESSAGE
try:
csv.close()
await ch.send("CSV", file=discord.File('pyro.csv'))

但我希望能够做同样的事情,而不必在发送文件之前将文件存储到我的硬盘上。有什么方法可以做到这一点吗?谢谢

您可以构造一个类似BytesIO文件的对象:

import io
buf = io.BytesIO(b'thedata')
f = discord.File(buf, filename='filename_shown_in_discord.txt')
import io
import csv
import discord
header = ['Some', 'Header']
data = [[1, 2], [3, 4]]
buffer = io.StringIO()
writer = csv.writer(buffer)
writer.writerow(header)
writer.writerows(data)
buffer.seek(0) #Don't know why this is here, but it worked...
await ctx.channel.send(file=discord.File(buffer, 'some-file.csv'))

最新更新