在AWS中存储从Pandas导出的Excel文件

时间:2019-02-25 09:02:41

标签: python pandas amazon-s3 flask

我正在使用Flask和SQLite数据库创建一个小型网站。我要做的一件事是(从数据库中)获取一些数据并将其导出为Excel文件。我想提供下载该Excel文件的选项。一种选择是使用Pandas写入将存储在Web服务器上的Excel文件,并使用Flask的send_file提供下载选项。

但是,是否可以在不将文件“本地”存储在服务器上的情况下提供可下载的Excel文件?例如在AWS S3上。我希望Web服务器上具有可预测的存储大小。 (然后看看是否有可能)。

一个选项可能是“本地”写入文件,然后将其发送到AWS,然后从服务器中删除。理想情况下,我宁愿直接捕获文件流,然后将其发送到S3,但我认为这是不可能的,因为to_excel仅采用文件路径(或ExcelWriter对象,但这需要文件路径)。

2 个答案:

答案 0 :(得分:2)

要添加到balderman的答案中,将其添加到S3的完整代码应为

import io
import pandas as pd
import boto3

# ...

# make data frame 'df'

output = io.BytesIO()
writer = pd.ExcelWriter(output, engine='xlsxwriter')
df.to_excel(writer)
writer.save()
data = output.getvalue()

s3 = boto3.resource('s3')
s3.Bucket('my-bucket').put_object(Key='data.xlsx', Body=data)

另请参阅XlsxWriter documentation

答案 1 :(得分:1)

从这里拍摄:Write to StringIO object using Pandas Excelwriter?

您可以将“输出”转储到S3

# Note, Python 2 example. For Python 3 use: output = io.BytesIO().
output = StringIO.StringIO()

# Use the StringIO object as the filehandle.
writer = pd.ExcelWriter(output, engine='xlsxwriter')