Хранить файл Excel, экспортированный из Pandas, в AWS

Я делаю небольшой веб-сайт, используя Flask, с базой данных SQLite. Одна из вещей, которые я хочу сделать, это взять некоторые данные (из базы данных) и экспортировать их в виде файла Excel. Я хочу предложить вариант загрузки этого файла Excel. Один из вариантов сделать это — использовать Pandas для записи в файл Excel, который будет храниться на веб-сервере, и использовать send_file Flask, чтобы предложить вариант загрузки.

Однако возможно ли предоставить загружаемый файл Excel без сохранения файла «локально» на сервере? Например, на AWS S3. Я хочу иметь предсказуемый размер хранилища на веб-сервере. (И просто посмотрите, возможно ли это в любом случае.)

Одним из вариантов может быть запись в файл «локально», затем отправка его в AWS, а затем удаление с сервера. В идеале я бы предпочел напрямую захватить файловый поток, а затем отправить его на S3, но я не думаю, что это возможно, поскольку to_excel принимает только путь к файлу (или объект ExcelWriter, но он принимает путь к файлу).

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
11
0
6 768
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Взято отсюда: Записать в объект StringIO с помощью 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 в вашем примере не читается из реального файла.

Vegard Stikbakke 25.02.2019 10:55

Позвольте мне попытаться понять, что вы пытаетесь сделать. Поток данных: БД --> Панды --> Excel --> S3. Итак, реальный вопрос: могут ли Pandas вернуть поток Excel вызывающей стороне, а не записывать его в файл?

balderman 25.02.2019 11:32

Да, точно! Большое спасибо!

Vegard Stikbakke 25.02.2019 11:55

Я добавил более полный ответ ниже, надеюсь, вы не возражаете!

Vegard Stikbakke 25.02.2019 12:48
Ответ принят как подходящий

Чтобы добавить к ответу балдермана, полный код для его перехода на 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.

Другие вопросы по теме