Чтение файла Excel из s3 с использованием панд в лямбду и преобразование в CSV - PullRequest
0 голосов
/ 23 мая 2019

Я пытаюсь прочитать файл Excel из корзины s3 с использованием python в lambda, выполнить некоторые манипуляции с использованием панд, преобразовать его в csv и вернуть в тот же сегмент.

import pandas as pd
import boto3
import os
from urllib.parse import unquote_plus

    def lambda_handler(event, context):
        s3=boto3.client('s3')
        if event:

            file_obj=event['Records'][0]
            bucket = event['Records'][0]['s3']['bucket']['name']
            key = event['Records'][0]['s3']['object']['key'].encode('utf-8')
            filename=unquote_plus(key)
            ----this line throws error "a bytes-like object is required, not 'str': TypeError"

            print("Filename:",filename)
            q=(os.path.splitext(os.path.basename(filename))[0]) #read filename
            print(q)
            obj=s3.get_object(Bucket=bucket,Key=filename)
            print(obj['Body'])                       
            pd.read_excel(obj['Body'],index_col=False,header=5,usecols="A,C:M,U")
            df=df[:-1]                             
            df=df.replace(np.nan,'')                

            print(df)
            dfcsv = df.to_csv('s3://bucket/sales.csv' ,sep='\t',encoding='utf-8',index=False) #converttocsv

Это приводит к ошибке:

Установить xlrd> = 1.0.0 для поддержки Excel: ImportError

Также этот код прекрасно работает в локальной среде, но не работает в лямбде.

Я пытался импортировать xlrd, но он выдает синтаксическую ошибку

Также есть ли лучший способ написания кода для моего требования?

...