【问题标题】:Store Excel file exported from Pandas in AWS在 AWS 中存储从 Pandas 导出的 Excel 文件
【发布时间】:2019-07-18 15:30:16
【问题描述】:

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

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

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

【问题讨论】:

    标签: python pandas amazon-s3 flask


    【解决方案1】:

    要添加到 balderman 的答案,将其导入 S3 的完整代码是

    import io
    import pandas as pd
    import boto3
    
    # ...
    
    # make data frame 'df'
    
    with io.BytesIO() as output:
      with pd.ExcelWriter(output, engine='xlsxwriter') as writer:
        df.to_excel(writer)
      data = output.getvalue()
    
    s3 = boto3.resource('s3')
    s3.Bucket('my-bucket').put_object(Key='data.xlsx', Body=data)
    

    另请参阅XlsxWriter documentation

    【讨论】:

      【解决方案2】:

      取自这里: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')
      

      【讨论】:

      • 谢谢,但这并不能完全回答我想要的。也许我不清楚。我想要的是上传文件而不需要先存储它。即,data 在您的示例中不是从实际文件中读取的。
      • 让我试着理解你想做什么。数据流为:DB --> Pandas --> Excel --> S3。所以真正的问题是:Pandas 能否将 Excel 流返回给调用者而不将其写入文件?
      • 是的,没错!非常感谢!
      • 我在下面添加了一个更完整的答案,希望你不要介意!
      猜你喜欢
      • 2021-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-12-01
      相关资源
      最近更新 更多