Python 使用lambda中的pandas从s3读取excel文件并转换为csv

Python 使用lambda中的pandas从s3读取excel文件并转换为csv,python,amazon-web-services,amazon-s3,aws-lambda,boto3,Python,Amazon Web Services,Amazon S3,Aws Lambda,Boto3,我试图在lambda中使用python从s3存储桶读取一个excel文件,使用pandas进行一些操作,将其转换为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:

我试图在lambda中使用python从s3存储桶读取一个excel文件,使用pandas进行一些操作,将其转换为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

此外,该代码在本地环境中运行良好,但在lambda中失败

我试图导入xlrd,但它抛出语法错误


还有没有更好的方法来编写符合我要求的代码?

可能重复的错误消息提示您是否安装了xlrd?我建议您在本地尝试,然后将在lambda中工作的库与code@petezurich我在lambda上运行这个,当我导入xlrd时,这是抛出语法error@Tejas这是意料之中的,因为您尚未为lambda函数安装xlrd。见Ninad Gaikwad的评论。您需要打包默认情况下未安装的库,并将其与您的代码一起上载(例如,作为zip文件)。是否已按照错误消息所示安装xlrd?我建议您在本地尝试此操作,然后打包在lambda中工作的库以及code@petezurich我在lambda上运行这个,当我导入xlrd时,它会抛出语法error@Tejas这是意料之中的,因为您尚未为lambda函数安装xlrd。见Ninad Gaikwad的评论。您需要打包默认情况下未安装的库,并将其与代码一起上载(例如,作为zip文件)。