Чтение данных Excel из S3 с использованием лямбды - PullRequest
0 голосов
/ 24 марта 2020
import xlrd
  resp = obj.get()
  lines = resp['Body'].read()
  book = xlrd.open_workbook(lines)
  sheet = workbook.sheet_by_index(0)

Я пытаюсь прочитать файл Excel в корзине S3 с помощью лямбда-функции. Пока я пытаюсь запустить этот код, он выдает исключение:

"встроенный нулевой байт"

Я все еще учусь. Может кто-нибудь помочь мне с тем, где я ошибся?

Ответы [ 2 ]

1 голос
/ 24 марта 2020

Я не использую xlrd, но не сразу вижу какие-либо опции для передачи тела файла CSV / XLSX или для потоковой передачи содержимого в него.

Возможно, вам потребуется загрузить Электронная таблица в папку /tmp функции Lambda (макс. пространство 512 МБ), а затем откройте ее, используя xlrd.open_workbook('/tmp/data.xlsx').

Если она больше 512 МБ, вам нужно проявить творческий подход. Например, используйте больший объем памяти Lambda (скажем, 1024 МБ), найдите пакет Python, который предоставляет файл в памяти, а затем заполните его из потока объекта S3, а затем передайте виртуальный файл в xlrd.open_workbook().

0 голосов
/ 24 марта 2020

Решено: вам просто нужно скачать файл в каталог '/ tmp'. Вот небольшая модификация:

resp = obj.get()
lines = resp['Body'].read()
with open('/tmp/'+ 'Import.xlsx','wb') as f:
     s3_client.download_file('tdx-in-bucket',key,'/tmp/'+ 'Import.xlsx')
     book = xlrd.open_workbook('/tmp/'+'Canada Import.xlsx')
     sheet = book.sheet_by_index(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...